restfuncs-transformer 0.9.7 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,67 @@
1
+ import ts, { MethodDeclaration, Node, ObjectLiteralExpression } from 'typescript';
2
+ import { FileTransformRun } from "./transformerUtil";
3
+ /**
4
+ * Transformer that adds the following statement to the method body (like in readme.md#how-it-works)
5
+ * <code><pre>
6
+ * static getRemoteMethodsMeta() {
7
+ * ....
8
+ * }
9
+ * </pre></code>
10
+ */
11
+ export declare class AddRemoteMethodsMeta extends FileTransformRun {
12
+ diagnosis_currentClass_instanceMethodsSeen?: Set<string>;
13
+ currentClass_instanceMethodsMeta?: Record<string, ObjectLiteralExpression>;
14
+ astWasModified: boolean;
15
+ visit(node: Node): Node;
16
+ /**
17
+ * Crates the following expression like in readme.md#how-it-works
18
+ * <code><pre>
19
+ * {
20
+ * arguments: {
21
+ * ...
22
+ * }
23
+ * jsDoc: {
24
+ * ...
25
+ * }
26
+ * }
27
+ * </pre></code>
28
+ *
29
+ * @param methodName
30
+ * @private
31
+ */
32
+ createMethodMetaExpression(node: MethodDeclaration, methodName: string): ts.ObjectLiteralExpression;
33
+ /**
34
+ * Crates the following expression like in readme.md#how-it-works
35
+ * <code><pre>
36
+ * {
37
+ * comment: "...",
38
+ * params: {...},
39
+ * ...
40
+ * }
41
+ * </pre></code>
42
+ *
43
+ * or
44
+ *
45
+ * <code><pre>
46
+ * undefined
47
+ * </pre></code>
48
+ *
49
+ *
50
+ * @param methodName
51
+ * @private
52
+ */
53
+ private createJsDocExpression;
54
+ /**
55
+ * Crates the following expression like in readme.md#how-it-works
56
+ * <code><pre>
57
+ * static getRemoteMethodsMeta() {
58
+ * ....
59
+ * }
60
+ * </pre></code>
61
+ *
62
+ * @param methodName
63
+ * @private
64
+ */
65
+ private create_static_getRemoteMethodsMeta_expression;
66
+ }
67
+ //# sourceMappingURL=AddRemoteMethodsMeta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddRemoteMethodsMeta.d.ts","sourceRoot":"","sources":["AddRemoteMethodsMeta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAEP,iBAAiB,EACjB,IAAI,EACJ,uBAAuB,EAG1B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAInD;;;;;;;GAOG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;IAEtD,0CAA0C,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzD,gCAAgC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IAC3E,cAAc,UAAS;IAGvB,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAyDvB;;;;;;;;;;;;;;;OAeG;IACH,0BAA0B,CAAC,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM;IAkHtE;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,qBAAqB;IA+E7B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,6CAA6C;CA8ExD"}
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.AddRemoteMethodsMeta = void 0;
27
+ const typescript_1 = __importStar(require("typescript"));
28
+ const transformerUtil_1 = require("./transformerUtil");
29
+ const index_1 = require("./index");
30
+ /**
31
+ * Transformer that adds the following statement to the method body (like in readme.md#how-it-works)
32
+ * <code><pre>
33
+ * static getRemoteMethodsMeta() {
34
+ * ....
35
+ * }
36
+ * </pre></code>
37
+ */
38
+ class AddRemoteMethodsMeta extends transformerUtil_1.FileTransformRun {
39
+ constructor() {
40
+ super(...arguments);
41
+ this.astWasModified = false;
42
+ }
43
+ /* Visitor Function */
44
+ visit(node) {
45
+ var _a;
46
+ if (node.kind === typescript_1.SyntaxKind.MethodDeclaration) { // @remote ?
47
+ const methodDeclaration = node;
48
+ if (this.getChilds(methodDeclaration).some(n => n.kind == typescript_1.SyntaxKind.StaticKeyword)) { // static ?
49
+ return node;
50
+ }
51
+ if (this.getParent().kind !== typescript_1.SyntaxKind.ClassDeclaration) { // Method not under a class (i.e. an anonymous object ?}
52
+ return node;
53
+ }
54
+ const methodName = methodDeclaration.name.escapedText;
55
+ try {
56
+ let remoteDecorator = this.getChilds(methodDeclaration).find(d => d.kind === typescript_1.SyntaxKind.Decorator);
57
+ if (!remoteDecorator) { // no @remote found ?
58
+ return node;
59
+ }
60
+ // Diagnosis: Check for overloads:
61
+ if ((_a = this.diagnosis_currentClass_instanceMethodsSeen) === null || _a === void 0 ? void 0 : _a.has(methodName)) { // Seen twice ?
62
+ throw new Error(`@remote methods cannot have multiple/overloaded signatures: ${methodName}`); // TODO: add diagnosis
63
+ }
64
+ this.currentClass_instanceMethodsMeta[methodName] = this.createMethodMetaExpression(methodDeclaration, methodName); // create the code:
65
+ }
66
+ finally {
67
+ this.diagnosis_currentClass_instanceMethodsSeen.add(methodName);
68
+ }
69
+ return node;
70
+ }
71
+ else if (node.kind === typescript_1.SyntaxKind.ClassDeclaration) {
72
+ this.diagnosis_currentClass_instanceMethodsSeen = new Set();
73
+ this.currentClass_instanceMethodsMeta = {};
74
+ try {
75
+ let result = this.visitChilds(node);
76
+ if (Object.keys(this.currentClass_instanceMethodsMeta).length > 0) { // Current class has @remote methods ?
77
+ // add "static getRemoteMethodsMeta() {...}" method:
78
+ // @ts-ignore yes, a bit hacky, but with factory.crateClassDeclation we might also miss some properties
79
+ result.members = this.context.factory.createNodeArray([...result.members.values(), this.create_static_getRemoteMethodsMeta_expression()]);
80
+ this.astWasModified = true;
81
+ }
82
+ return result;
83
+ }
84
+ finally {
85
+ this.currentClass_instanceMethodsMeta = undefined;
86
+ this.diagnosis_currentClass_instanceMethodsSeen = undefined;
87
+ }
88
+ }
89
+ else {
90
+ return this.visitChilds(node);
91
+ }
92
+ }
93
+ /**
94
+ * Crates the following expression like in readme.md#how-it-works
95
+ * <code><pre>
96
+ * {
97
+ * arguments: {
98
+ * ...
99
+ * }
100
+ * jsDoc: {
101
+ * ...
102
+ * }
103
+ * }
104
+ * </pre></code>
105
+ *
106
+ * @param methodName
107
+ * @private
108
+ */
109
+ createMethodMetaExpression(node, methodName) {
110
+ const factory = this.context.factory;
111
+ const arguments_typiaFuncs = {
112
+ /**
113
+ * typia.validateEquals
114
+ */
115
+ validateEquals: factory.createPropertyAccessExpression(factory.createIdentifier("typia"), factory.createIdentifier("validateEquals")),
116
+ "validatePrune": factory.createPropertyAccessExpression(factory.createPropertyAccessExpression(factory.createIdentifier("typia"), factory.createIdentifier("misc")), factory.createIdentifier("validatePrune"))
117
+ };
118
+ const result_typiaFuncs = Object.assign({}, arguments_typiaFuncs);
119
+ // Example from readme.md#how-it-works Copy&pasted through the [AST viewer tool](https://ts-ast-viewer.com/)
120
+ // @ts-ignore
121
+ return factory.createObjectLiteralExpression([
122
+ // arguments: {...}
123
+ factory.createPropertyAssignment(factory.createIdentifier("arguments"), factory.createObjectLiteralExpression(Object.keys(arguments_typiaFuncs).map((typiaFnName) => factory.createPropertyAssignment(factory.createIdentifier(typiaFnName), factory.createArrowFunction(undefined, undefined, [factory.createParameterDeclaration(undefined, undefined, factory.createIdentifier("args"), undefined, factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword), undefined)], undefined, factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), factory.createCallExpression(arguments_typiaFuncs[typiaFnName], [factory.createTypeReferenceNode(factory.createIdentifier("Parameters"), [factory.createIndexedAccessTypeNode(factory.createTypeQueryNode(factory.createQualifiedName(factory.createIdentifier("this"), factory.createIdentifier("prototype")), undefined), factory.createLiteralTypeNode(factory.createStringLiteral(methodName)))])], [factory.createIdentifier("args")])))), true)),
124
+ // result: {...}
125
+ factory.createPropertyAssignment(factory.createIdentifier("result"), factory.createObjectLiteralExpression(Object.keys(result_typiaFuncs).map((typiaFnName) => factory.createPropertyAssignment(factory.createIdentifier(typiaFnName), factory.createArrowFunction(undefined, undefined, [factory.createParameterDeclaration(undefined, undefined, factory.createIdentifier("value"), undefined, factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword), undefined)], undefined, factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), factory.createCallExpression(arguments_typiaFuncs[typiaFnName], [factory.createTypeReferenceNode(factory.createIdentifier("Awaited"), [factory.createTypeReferenceNode(factory.createIdentifier("ReturnType"), [factory.createIndexedAccessTypeNode(factory.createTypeQueryNode(factory.createQualifiedName(factory.createIdentifier("this"), factory.createIdentifier("prototype")), undefined), factory.createLiteralTypeNode(factory.createStringLiteral(methodName)))])])], [factory.createIdentifier("value")])))), true)),
126
+ factory.createPropertyAssignment(factory.createIdentifier("jsDoc"), this.createJsDocExpression(node, methodName))
127
+ ], true);
128
+ }
129
+ /**
130
+ * Crates the following expression like in readme.md#how-it-works
131
+ * <code><pre>
132
+ * {
133
+ * comment: "...",
134
+ * params: {...},
135
+ * ...
136
+ * }
137
+ * </pre></code>
138
+ *
139
+ * or
140
+ *
141
+ * <code><pre>
142
+ * undefined
143
+ * </pre></code>
144
+ *
145
+ *
146
+ * @param methodName
147
+ * @private
148
+ */
149
+ createJsDocExpression(node, diagnosis_methodName) {
150
+ var _a;
151
+ const factory = this.context.factory;
152
+ if (!node.jsDoc || node.jsDoc.length == 0) { // no jsdoc
153
+ return factory.createIdentifier("undefined");
154
+ }
155
+ const jsdoc = node.jsDoc[node.jsDoc.length - 1]; // use last jsDoc
156
+ const comment = jsdoc.comment || "";
157
+ if (typeof comment !== "string") {
158
+ throw new Error(`Expected comment to be a string. Got: ${comment}`); // TODO add to diagnostics instead
159
+ }
160
+ // Collect params and tags
161
+ const params = {};
162
+ const tags = [];
163
+ (_a = jsdoc.tags) === null || _a === void 0 ? void 0 : _a.forEach(tag => {
164
+ var _a;
165
+ const name = tag.tagName.escapedText.toLowerCase();
166
+ const comment = tag.comment;
167
+ if (comment && typeof comment !== "string") {
168
+ throw new Error(`Expected comment to be a string. Got: ${comment}`); // TODO add to diagnostics instead
169
+ }
170
+ if (name === "param") {
171
+ const paramname = (_a = tag.name) === null || _a === void 0 ? void 0 : _a.escapedText;
172
+ if (paramname && comment) {
173
+ params[paramname] = comment;
174
+ }
175
+ }
176
+ else {
177
+ const tagName = tag.name;
178
+ tags.push({ name, comment });
179
+ }
180
+ });
181
+ // JSDoc. Example from readme.md#how-it-works Copy&pasted through the [AST viewer tool](https://ts-ast-viewer.com/)
182
+ let jsDocExpression = factory.createObjectLiteralExpression([
183
+ factory.createPropertyAssignment(factory.createIdentifier("comment"), factory.createStringLiteral(comment)),
184
+ factory.createPropertyAssignment(factory.createIdentifier("params"), factory.createObjectLiteralExpression(Object.keys(params).map(paramName => factory.createPropertyAssignment(factory.createIdentifier(paramName), factory.createStringLiteral(params[paramName]))), false)),
185
+ factory.createPropertyAssignment(factory.createIdentifier("tags"), factory.createArrayLiteralExpression(tags.map(tag => factory.createObjectLiteralExpression([
186
+ factory.createPropertyAssignment(factory.createIdentifier("name"), factory.createStringLiteral(tag.name)),
187
+ factory.createPropertyAssignment(factory.createIdentifier("comment"), tag.comment !== undefined ? factory.createStringLiteral(tag.comment) : factory.createIdentifier("undefined"))
188
+ ], false)), false))
189
+ ], true);
190
+ return jsDocExpression;
191
+ }
192
+ /**
193
+ * Crates the following expression like in readme.md#how-it-works
194
+ * <code><pre>
195
+ * static getRemoteMethodsMeta() {
196
+ * ....
197
+ * }
198
+ * </pre></code>
199
+ *
200
+ * @param methodName
201
+ * @private
202
+ */
203
+ create_static_getRemoteMethodsMeta_expression() {
204
+ const factory = this.context.factory;
205
+ let instanceMethods = factory.createObjectLiteralExpression(Object.keys(this.currentClass_instanceMethodsMeta).map(methodName => factory.createPropertyAssignment(factory.createStringLiteral(methodName), this.currentClass_instanceMethodsMeta[methodName])), true);
206
+ // Example from readme.md#how-it-works Copy&pasted through the [AST viewer tool](https://ts-ast-viewer.com/)
207
+ return factory.createMethodDeclaration([factory.createToken(typescript_1.default.SyntaxKind.StaticKeyword)], undefined, factory.createIdentifier("getRemoteMethodsMeta"), undefined, undefined, [], factory.createParenthesizedType(factory.createTypeQueryNode(factory.createQualifiedName(factory.createIdentifier("this"), factory.createIdentifier("type_remoteMethodsMeta")), undefined)), factory.createBlock([
208
+ factory.createExpressionStatement(factory.createPropertyAccessExpression(factory.createThis(), factory.createIdentifier("__hello_developer__make_sure_your_class_is_a_subclass_of_ServerSession"))),
209
+ factory.createVariableStatement(undefined, factory.createVariableDeclarationList([factory.createVariableDeclaration(factory.createIdentifier("typia"), undefined, undefined, factory.createPropertyAccessExpression(factory.createThis(), factory.createIdentifier("typiaRuntime")))], typescript_1.default.NodeFlags.Let)),
210
+ factory.createReturnStatement(factory.createObjectLiteralExpression([
211
+ factory.createPropertyAssignment(factory.createIdentifier("transformerVersion"), factory.createObjectLiteralExpression([
212
+ factory.createPropertyAssignment(factory.createIdentifier("major"), factory.createIdentifier(`${index_1.transformerVersion.major}`)),
213
+ factory.createPropertyAssignment(factory.createIdentifier("feature"), factory.createIdentifier(`${index_1.transformerVersion.feature}`))
214
+ ], false)),
215
+ factory.createPropertyAssignment(factory.createIdentifier("instanceMethods"), instanceMethods)
216
+ ], true))
217
+ ], true));
218
+ }
219
+ }
220
+ exports.AddRemoteMethodsMeta = AddRemoteMethodsMeta;
221
+ //# sourceMappingURL=AddRemoteMethodsMeta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddRemoteMethodsMeta.js","sourceRoot":"","sources":["AddRemoteMethodsMeta.ts"],"names":[],"mappings":"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"}