restfuncs-transformer 0.9.8 → 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.
- package/AddRemoteMethodsMeta.d.ts +67 -0
- package/AddRemoteMethodsMeta.d.ts.map +1 -0
- package/AddRemoteMethodsMeta.js +221 -0
- package/AddRemoteMethodsMeta.js.map +1 -0
- package/AddRemoteMethodsMeta.ts +403 -0
- package/devPlayground.d.ts +2 -0
- package/devPlayground.d.ts.map +1 -0
- package/devPlayground.js +31 -0
- package/devPlayground.js.map +1 -0
- package/devPlayground.ts +15 -0
- package/index.d.ts +7 -2
- package/index.d.ts.map +1 -1
- package/index.js +58 -29
- package/index.js.map +1 -1
- package/index.ts +89 -4
- package/package.json +10 -6
- package/readme.md +42 -3
- package/transformerUtil.d.ts +50 -0
- package/transformerUtil.d.ts.map +1 -0
- package/transformerUtil.js +104 -0
- package/transformerUtil.js.map +1 -0
- package/transformerUtil.ts +104 -0
|
@@ -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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"}
|