@nestia/sdk 7.0.0-dev.20250606 → 7.0.0-dev.20250607

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.
Files changed (69) hide show
  1. package/lib/analyses/TypedHttpRouteAnalyzer.js +12 -3
  2. package/lib/analyses/TypedHttpRouteAnalyzer.js.map +1 -1
  3. package/lib/analyses/TypedWebSocketRouteAnalyzer.js +4 -1
  4. package/lib/analyses/TypedWebSocketRouteAnalyzer.js.map +1 -1
  5. package/lib/generates/SdkGenerator.js +2 -1
  6. package/lib/generates/SdkGenerator.js.map +1 -1
  7. package/lib/generates/SwaggerGenerator.js +3 -3
  8. package/lib/generates/SwaggerGenerator.js.map +1 -1
  9. package/lib/generates/internal/E2eFileProgrammer.js +17 -22
  10. package/lib/generates/internal/E2eFileProgrammer.js.map +1 -1
  11. package/lib/generates/internal/SdkAliasCollection.d.ts +3 -1
  12. package/lib/generates/internal/SdkAliasCollection.js +23 -12
  13. package/lib/generates/internal/SdkAliasCollection.js.map +1 -1
  14. package/lib/generates/internal/SdkFileProgrammer.js +1 -1
  15. package/lib/generates/internal/SdkFileProgrammer.js.map +1 -1
  16. package/lib/generates/internal/SdkHttpCloneReferencer.js +2 -1
  17. package/lib/generates/internal/SdkHttpCloneReferencer.js.map +1 -1
  18. package/lib/generates/internal/SdkHttpFunctionProgrammer.d.ts +1 -6
  19. package/lib/generates/internal/SdkHttpFunctionProgrammer.js +33 -48
  20. package/lib/generates/internal/SdkHttpFunctionProgrammer.js.map +1 -1
  21. package/lib/generates/internal/SdkHttpNamespaceProgrammer.d.ts +1 -6
  22. package/lib/generates/internal/SdkHttpNamespaceProgrammer.js +46 -66
  23. package/lib/generates/internal/SdkHttpNamespaceProgrammer.js.map +1 -1
  24. package/lib/generates/internal/SdkHttpParameterProgrammer.d.ts +41 -0
  25. package/lib/generates/internal/SdkHttpParameterProgrammer.js +110 -0
  26. package/lib/generates/internal/SdkHttpParameterProgrammer.js.map +1 -0
  27. package/lib/generates/internal/SdkHttpRouteProgrammer.js +6 -18
  28. package/lib/generates/internal/SdkHttpRouteProgrammer.js.map +1 -1
  29. package/lib/generates/internal/SdkHttpSimulationProgrammer.d.ts +1 -6
  30. package/lib/generates/internal/SdkHttpSimulationProgrammer.js +23 -34
  31. package/lib/generates/internal/SdkHttpSimulationProgrammer.js.map +1 -1
  32. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.d.ts +2 -1
  33. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js +33 -27
  34. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js.map +1 -1
  35. package/lib/generates/internal/SdkWebSocketParameterProgrammer.d.ts +22 -0
  36. package/lib/generates/internal/SdkWebSocketParameterProgrammer.js +58 -0
  37. package/lib/generates/internal/SdkWebSocketParameterProgrammer.js.map +1 -0
  38. package/lib/generates/internal/SdkWebSocketRouteProgrammer.d.ts +2 -1
  39. package/lib/generates/internal/SdkWebSocketRouteProgrammer.js +65 -51
  40. package/lib/generates/internal/SdkWebSocketRouteProgrammer.js.map +1 -1
  41. package/lib/generates/internal/SwaggerOperationComposer.js +9 -6
  42. package/lib/generates/internal/SwaggerOperationComposer.js.map +1 -1
  43. package/lib/generates/internal/SwaggerOperationParameterComposer.d.ts +1 -1
  44. package/lib/generates/internal/SwaggerOperationParameterComposer.js.map +1 -1
  45. package/lib/structures/ITypedHttpRoute.d.ts +6 -1
  46. package/lib/structures/ITypedHttpRouteParameter.d.ts +2 -2
  47. package/lib/structures/ITypedWebSocketRoute.d.ts +5 -1
  48. package/package.json +5 -5
  49. package/src/analyses/TypedHttpRouteAnalyzer.ts +28 -10
  50. package/src/analyses/TypedWebSocketRouteAnalyzer.ts +15 -0
  51. package/src/generates/SdkGenerator.ts +2 -1
  52. package/src/generates/SwaggerGenerator.ts +5 -13
  53. package/src/generates/internal/E2eFileProgrammer.ts +34 -43
  54. package/src/generates/internal/SdkAliasCollection.ts +46 -17
  55. package/src/generates/internal/SdkFileProgrammer.ts +1 -1
  56. package/src/generates/internal/SdkHttpCloneReferencer.ts +5 -1
  57. package/src/generates/internal/SdkHttpFunctionProgrammer.ts +49 -109
  58. package/src/generates/internal/SdkHttpNamespaceProgrammer.ts +58 -118
  59. package/src/generates/internal/SdkHttpParameterProgrammer.ts +178 -0
  60. package/src/generates/internal/SdkHttpRouteProgrammer.ts +9 -21
  61. package/src/generates/internal/SdkHttpSimulationProgrammer.ts +23 -77
  62. package/src/generates/internal/SdkWebSocketNamespaceProgrammer.ts +214 -210
  63. package/src/generates/internal/SdkWebSocketParameterProgrammer.ts +87 -0
  64. package/src/generates/internal/SdkWebSocketRouteProgrammer.ts +112 -98
  65. package/src/generates/internal/SwaggerOperationComposer.ts +9 -9
  66. package/src/generates/internal/SwaggerOperationParameterComposer.ts +1 -1
  67. package/src/structures/ITypedHttpRoute.ts +12 -1
  68. package/src/structures/ITypedHttpRouteParameter.ts +2 -2
  69. package/src/structures/ITypedWebSocketRoute.ts +5 -1
@@ -3,28 +3,31 @@ import { ExpressionFactory } from "typia/lib/factories/ExpressionFactory";
3
3
  import { IdentifierFactory } from "typia/lib/factories/IdentifierFactory";
4
4
  import { TypeFactory } from "typia/lib/factories/TypeFactory";
5
5
 
6
+ import { INestiaProject } from "../../structures/INestiaProject";
6
7
  import { ITypedWebSocketRoute } from "../../structures/ITypedWebSocketRoute";
7
- import { ITypedWebSocketRouteParameter } from "../../structures/ITypedWebSocketRouteParameter";
8
8
  import { FilePrinter } from "./FilePrinter";
9
9
  import { ImportDictionary } from "./ImportDictionary";
10
10
  import { SdkAliasCollection } from "./SdkAliasCollection";
11
+ import { SdkWebSocketParameterProgrammer } from "./SdkWebSocketParameterProgrammer";
11
12
 
12
13
  export namespace SdkWebSocketNamespaceProgrammer {
13
14
  export const write =
15
+ (project: INestiaProject) =>
14
16
  (importer: ImportDictionary) =>
15
17
  (route: ITypedWebSocketRoute): ts.ModuleDeclaration =>
16
18
  ts.factory.createModuleDeclaration(
17
19
  [ts.factory.createToken(ts.SyntaxKind.ExportKeyword)],
18
20
  ts.factory.createIdentifier(route.name),
19
21
  ts.factory.createModuleBlock([
20
- ...writeTypes(importer)(route),
22
+ ...writeTypes(project)(importer)(route),
21
23
  FilePrinter.enter(),
22
- writePath(route),
24
+ writePath(project)(route),
23
25
  ]),
24
26
  ts.NodeFlags.Namespace,
25
27
  );
26
28
 
27
29
  const writeTypes =
30
+ (project: INestiaProject) =>
28
31
  (importer: ImportDictionary) =>
29
32
  (route: ITypedWebSocketRoute): ts.TypeAliasDeclaration[] => {
30
33
  const output: ts.TypeAliasDeclaration[] = [];
@@ -38,8 +41,10 @@ export namespace SdkWebSocketNamespaceProgrammer {
38
41
  ),
39
42
  );
40
43
 
44
+ if (project.config.keyword === true)
45
+ declare("Props", SdkAliasCollection.websocketProps(route));
41
46
  declare(
42
- "Response",
47
+ "Output",
43
48
  ts.factory.createTypeLiteralNode([
44
49
  ts.factory.createPropertySignature(
45
50
  undefined,
@@ -74,260 +79,259 @@ export namespace SdkWebSocketNamespaceProgrammer {
74
79
  ]),
75
80
  );
76
81
 
77
- const acceptor: ITypedWebSocketRouteParameter.IAcceptor =
78
- route.parameters.find((x) => x.category === "acceptor")!;
79
- const query: ITypedWebSocketRouteParameter.IQuery | undefined =
80
- route.parameters.find((x) => x.category === "query");
81
- const driver: ITypedWebSocketRouteParameter.IDriver | undefined =
82
- route.parameters.find((x) => x.category === "driver");
83
82
  declare(
84
83
  "Header",
85
84
  SdkAliasCollection.name({
86
- type: (route.parameters.find((x) => x.category === "header")?.type ??
87
- acceptor.type.typeArguments?.[0])!,
85
+ type: (route.header?.type ?? route.acceptor.type.typeArguments?.[0])!,
88
86
  }),
89
87
  );
90
88
  declare(
91
89
  "Provider",
92
90
  SdkAliasCollection.name({
93
91
  type:
94
- driver?.type.typeArguments?.[0] ??
95
- acceptor.type.typeArguments?.[2]!,
92
+ route.driver?.type.typeArguments?.[0] ??
93
+ route.acceptor.type.typeArguments?.[2]!,
96
94
  }),
97
95
  );
98
96
  declare(
99
97
  "Listener",
100
98
  SdkAliasCollection.name({
101
- type: acceptor.type.typeArguments?.[1]!,
99
+ type: route.acceptor.type.typeArguments?.[1]!,
102
100
  }),
103
101
  );
104
- if (query) declare("Query", SdkAliasCollection.name(query));
102
+ if (route.query) declare("Query", SdkAliasCollection.name(route.query));
105
103
  return output;
106
104
  };
107
105
 
108
- const writePath = (route: ITypedWebSocketRoute): ts.VariableStatement => {
109
- const pathParams: ITypedWebSocketRouteParameter.IParam[] =
110
- route.parameters.filter(
111
- (p) => p.category === "param",
112
- ) as ITypedWebSocketRouteParameter.IParam[];
113
- const query: ITypedWebSocketRouteParameter.IQuery | undefined =
114
- route.parameters.find((p) => p.category === "query");
115
- const total: Array<
116
- | ITypedWebSocketRouteParameter.IParam
117
- | ITypedWebSocketRouteParameter.IQuery
118
- > = [...pathParams, ...(query ? [query] : [])];
119
- const out = (body: ts.ConciseBody) =>
120
- constant("path")(
121
- ts.factory.createArrowFunction(
122
- [],
123
- [],
124
- total.map((p) =>
125
- IdentifierFactory.parameter(
126
- p.name,
127
- p === query
128
- ? ts.factory.createTypeReferenceNode(`${route.name}.Query`)
129
- : SdkAliasCollection.name(p),
130
- ),
106
+ const writePath =
107
+ (project: INestiaProject) =>
108
+ (route: ITypedWebSocketRoute): ts.VariableStatement => {
109
+ const out = (body: ts.ConciseBody) =>
110
+ constant("path")(
111
+ ts.factory.createArrowFunction(
112
+ [],
113
+ [],
114
+ SdkWebSocketParameterProgrammer.getParameterDeclarations({
115
+ project,
116
+ route,
117
+ provider: false,
118
+ prefix: false,
119
+ }),
120
+ undefined,
121
+ undefined,
122
+ body,
131
123
  ),
132
- undefined,
133
- undefined,
134
- body,
135
- ),
136
- );
137
- if (total.length === 0)
138
- return out(ts.factory.createStringLiteral(route.path));
124
+ );
125
+ if (route.pathParameters.length === 0 && route.query === null)
126
+ return out(ts.factory.createStringLiteral(route.path));
139
127
 
140
- const template = () => {
141
- const split: string[] = route.path.split(":");
142
- if (split.length === 1) return ts.factory.createStringLiteral(route.path);
143
- return ts.factory.createTemplateExpression(
144
- ts.factory.createTemplateHead(split[0]),
145
- split.slice(1).map((s, i, arr) => {
146
- const name: string = s.split("/")[0];
147
- return ts.factory.createTemplateSpan(
148
- ts.factory.createCallExpression(
149
- ts.factory.createIdentifier("encodeURIComponent"),
150
- undefined,
151
- [
152
- ts.factory.createBinaryExpression(
153
- ts.factory.createCallChain(
154
- ts.factory.createPropertyAccessChain(
155
- ts.factory.createIdentifier(
156
- pathParams.find((p) => p.field === name)!.name,
128
+ const access = (key: string) =>
129
+ project.config.keyword === true
130
+ ? ts.factory.createPropertyAccessExpression(
131
+ ts.factory.createIdentifier("props"),
132
+ key,
133
+ )
134
+ : ts.factory.createIdentifier(key);
135
+ const template = () => {
136
+ const split: string[] = route.path.split(":");
137
+ if (split.length === 1)
138
+ return ts.factory.createStringLiteral(route.path);
139
+ return ts.factory.createTemplateExpression(
140
+ ts.factory.createTemplateHead(split[0]),
141
+ split.slice(1).map((s, i, arr) => {
142
+ const name: string = s.split("/")[0];
143
+ return ts.factory.createTemplateSpan(
144
+ ts.factory.createCallExpression(
145
+ ts.factory.createIdentifier("encodeURIComponent"),
146
+ undefined,
147
+ [
148
+ ts.factory.createBinaryExpression(
149
+ ts.factory.createCallChain(
150
+ ts.factory.createPropertyAccessChain(
151
+ access(
152
+ route.pathParameters.find((p) => p.field === name)!
153
+ .name,
154
+ ),
155
+ ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
156
+ "toString",
157
157
  ),
158
- ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
159
- "toString",
160
- ),
161
- undefined,
162
- undefined,
163
- [],
164
- ),
165
- ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
166
- ts.factory.createStringLiteral("null"),
167
- ),
168
- ],
169
- ),
170
- (i !== arr.length - 1
171
- ? ts.factory.createTemplateMiddle
172
- : ts.factory.createTemplateTail)(s.substring(name.length)),
173
- );
174
- }),
175
- );
176
- };
177
- if (query === undefined) return out(template());
178
-
179
- const block = (expr: ts.Expression) => {
180
- const computeName = (str: string): string =>
181
- total.find((p) => p.name === str) !== undefined
182
- ? computeName("_" + str)
183
- : str;
184
- const variables: string = computeName("variables");
185
- return ts.factory.createBlock(
186
- [
187
- local(variables)("URLSearchParams")(
188
- ts.factory.createNewExpression(
189
- ts.factory.createIdentifier("URLSearchParams"),
190
- [],
191
- [],
192
- ),
193
- ),
194
- ts.factory.createForOfStatement(
195
- undefined,
196
- ts.factory.createVariableDeclarationList(
197
- [
198
- ts.factory.createVariableDeclaration(
199
- ts.factory.createArrayBindingPattern([
200
- ts.factory.createBindingElement(
201
- undefined,
202
158
  undefined,
203
- ts.factory.createIdentifier("key"),
204
159
  undefined,
160
+ [],
205
161
  ),
206
- ts.factory.createBindingElement(
207
- undefined,
208
- undefined,
209
- ts.factory.createIdentifier("value"),
210
- undefined,
211
- ),
212
- ]),
213
- undefined,
214
- undefined,
215
- undefined,
216
- ),
217
- ],
218
- ts.NodeFlags.Const,
162
+ ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
163
+ ts.factory.createStringLiteral("null"),
164
+ ),
165
+ ],
166
+ ),
167
+ (i !== arr.length - 1
168
+ ? ts.factory.createTemplateMiddle
169
+ : ts.factory.createTemplateTail)(s.substring(name.length)),
170
+ );
171
+ }),
172
+ );
173
+ };
174
+ if (route.query === null) return out(template());
175
+
176
+ const block = (expr: ts.Expression) => {
177
+ const computeName = (str: string): string =>
178
+ [...route.pathParameters, ...(route.query ? [route.query] : [])].find(
179
+ (p) => p.name === str,
180
+ ) !== undefined
181
+ ? computeName("_" + str)
182
+ : str;
183
+ const variables: string = computeName("variables");
184
+ return ts.factory.createBlock(
185
+ [
186
+ local(variables)("URLSearchParams")(
187
+ ts.factory.createNewExpression(
188
+ ts.factory.createIdentifier("URLSearchParams"),
189
+ [],
190
+ [],
191
+ ),
219
192
  ),
220
- ts.factory.createCallExpression(
221
- ts.factory.createIdentifier("Object.entries"),
193
+ ts.factory.createForOfStatement(
222
194
  undefined,
223
- [ts.factory.createAsExpression(expr, TypeFactory.keyword("any"))],
224
- ),
225
- ts.factory.createIfStatement(
226
- ts.factory.createStrictEquality(
227
- ts.factory.createIdentifier("undefined"),
228
- ts.factory.createIdentifier("value"),
229
- ),
230
- ts.factory.createContinueStatement(),
231
- ts.factory.createIfStatement(
232
- ts.factory.createCallExpression(
233
- ts.factory.createIdentifier("Array.isArray"),
234
- undefined,
235
- [ts.factory.createIdentifier("value")],
236
- ),
237
- ts.factory.createExpressionStatement(
238
- ts.factory.createCallExpression(
239
- ts.factory.createPropertyAccessExpression(
240
- ts.factory.createIdentifier("value"),
241
- ts.factory.createIdentifier("forEach"),
242
- ),
243
- undefined,
244
- [
245
- ts.factory.createArrowFunction(
195
+ ts.factory.createVariableDeclarationList(
196
+ [
197
+ ts.factory.createVariableDeclaration(
198
+ ts.factory.createArrayBindingPattern([
199
+ ts.factory.createBindingElement(
200
+ undefined,
246
201
  undefined,
202
+ ts.factory.createIdentifier("key"),
247
203
  undefined,
248
- [IdentifierFactory.parameter("elem")],
204
+ ),
205
+ ts.factory.createBindingElement(
249
206
  undefined,
250
207
  undefined,
251
- ts.factory.createCallExpression(
252
- IdentifierFactory.access(
253
- ts.factory.createIdentifier(variables),
254
- "append",
255
- ),
256
- undefined,
257
- [
258
- ts.factory.createIdentifier("key"),
259
- ts.factory.createCallExpression(
260
- ts.factory.createIdentifier("String"),
261
- undefined,
262
- [ts.factory.createIdentifier("elem")],
263
- ),
264
- ],
265
- ),
208
+ ts.factory.createIdentifier("value"),
209
+ undefined,
266
210
  ),
267
- ],
211
+ ]),
212
+ undefined,
213
+ undefined,
214
+ undefined,
215
+ ),
216
+ ],
217
+ ts.NodeFlags.Const,
218
+ ),
219
+ ts.factory.createCallExpression(
220
+ ts.factory.createIdentifier("Object.entries"),
221
+ undefined,
222
+ [
223
+ ts.factory.createAsExpression(
224
+ expr,
225
+ TypeFactory.keyword("any"),
268
226
  ),
227
+ ],
228
+ ),
229
+ ts.factory.createIfStatement(
230
+ ts.factory.createStrictEquality(
231
+ ts.factory.createIdentifier("undefined"),
232
+ ts.factory.createIdentifier("value"),
269
233
  ),
270
- ts.factory.createExpressionStatement(
234
+ ts.factory.createContinueStatement(),
235
+ ts.factory.createIfStatement(
271
236
  ts.factory.createCallExpression(
272
- IdentifierFactory.access(
273
- ts.factory.createIdentifier(variables),
274
- "set",
275
- ),
237
+ ts.factory.createIdentifier("Array.isArray"),
276
238
  undefined,
277
- [
278
- ts.factory.createIdentifier("key"),
279
- ts.factory.createCallExpression(
280
- ts.factory.createIdentifier("String"),
281
- undefined,
282
- [ts.factory.createIdentifier("value")],
283
- ),
284
- ],
239
+ [ts.factory.createIdentifier("value")],
285
240
  ),
286
- ),
287
- ),
288
- ),
289
- ),
290
- local("location")("string")(template()),
291
- ts.factory.createReturnStatement(
292
- ts.factory.createConditionalExpression(
293
- ts.factory.createStrictEquality(
294
- ExpressionFactory.number(0),
295
- IdentifierFactory.access(
296
- ts.factory.createIdentifier(variables),
297
- "size",
298
- ),
299
- ),
300
- undefined,
301
- ts.factory.createIdentifier("location"),
302
- undefined,
303
- ts.factory.createTemplateExpression(
304
- ts.factory.createTemplateHead(""),
305
- [
306
- ts.factory.createTemplateSpan(
307
- ts.factory.createIdentifier("location"),
308
- ts.factory.createTemplateMiddle("?"),
241
+ ts.factory.createExpressionStatement(
242
+ ts.factory.createCallExpression(
243
+ ts.factory.createPropertyAccessExpression(
244
+ ts.factory.createIdentifier("value"),
245
+ ts.factory.createIdentifier("forEach"),
246
+ ),
247
+ undefined,
248
+ [
249
+ ts.factory.createArrowFunction(
250
+ undefined,
251
+ undefined,
252
+ [IdentifierFactory.parameter("elem")],
253
+ undefined,
254
+ undefined,
255
+ ts.factory.createCallExpression(
256
+ IdentifierFactory.access(
257
+ ts.factory.createIdentifier(variables),
258
+ "append",
259
+ ),
260
+ undefined,
261
+ [
262
+ ts.factory.createIdentifier("key"),
263
+ ts.factory.createCallExpression(
264
+ ts.factory.createIdentifier("String"),
265
+ undefined,
266
+ [ts.factory.createIdentifier("elem")],
267
+ ),
268
+ ],
269
+ ),
270
+ ),
271
+ ],
272
+ ),
309
273
  ),
310
- ts.factory.createTemplateSpan(
274
+ ts.factory.createExpressionStatement(
311
275
  ts.factory.createCallExpression(
312
276
  IdentifierFactory.access(
313
277
  ts.factory.createIdentifier(variables),
314
- "toString",
278
+ "set",
315
279
  ),
316
280
  undefined,
317
- undefined,
281
+ [
282
+ ts.factory.createIdentifier("key"),
283
+ ts.factory.createCallExpression(
284
+ ts.factory.createIdentifier("String"),
285
+ undefined,
286
+ [ts.factory.createIdentifier("value")],
287
+ ),
288
+ ],
318
289
  ),
319
- ts.factory.createTemplateTail(""),
320
290
  ),
321
- ],
291
+ ),
322
292
  ),
323
293
  ),
324
- ),
325
- ],
326
- true,
327
- );
294
+ local("location")("string")(template()),
295
+ ts.factory.createReturnStatement(
296
+ ts.factory.createConditionalExpression(
297
+ ts.factory.createStrictEquality(
298
+ ExpressionFactory.number(0),
299
+ IdentifierFactory.access(
300
+ ts.factory.createIdentifier(variables),
301
+ "size",
302
+ ),
303
+ ),
304
+ undefined,
305
+ ts.factory.createIdentifier("location"),
306
+ undefined,
307
+ ts.factory.createTemplateExpression(
308
+ ts.factory.createTemplateHead(""),
309
+ [
310
+ ts.factory.createTemplateSpan(
311
+ ts.factory.createIdentifier("location"),
312
+ ts.factory.createTemplateMiddle("?"),
313
+ ),
314
+ ts.factory.createTemplateSpan(
315
+ ts.factory.createCallExpression(
316
+ IdentifierFactory.access(
317
+ ts.factory.createIdentifier(variables),
318
+ "toString",
319
+ ),
320
+ undefined,
321
+ undefined,
322
+ ),
323
+ ts.factory.createTemplateTail(""),
324
+ ),
325
+ ],
326
+ ),
327
+ ),
328
+ ),
329
+ ],
330
+ true,
331
+ );
332
+ };
333
+ return out(block(access(route.query.name)));
328
334
  };
329
- return out(block(ts.factory.createIdentifier(query.name)));
330
- };
331
335
  }
332
336
 
333
337
  const local = (name: string) => (type: string) => (expression: ts.Expression) =>
@@ -0,0 +1,87 @@
1
+ import ts from "typescript";
2
+
3
+ import { INestiaProject } from "../../structures/INestiaProject";
4
+ import { ITypedWebSocketRoute } from "../../structures/ITypedWebSocketRoute";
5
+ import { SdkAliasCollection } from "./SdkAliasCollection";
6
+
7
+ export namespace SdkWebSocketParameterProgrammer {
8
+ export interface IEntry {
9
+ key: string;
10
+ type: ts.TypeNode;
11
+ }
12
+
13
+ export const getEntries = (props: {
14
+ project: INestiaProject;
15
+ route: ITypedWebSocketRoute;
16
+ provider: boolean;
17
+ prefix: boolean;
18
+ }): IEntry[] => {
19
+ const prefix: string = props.prefix ? `${props.route.name}.` : "";
20
+ return [
21
+ ...props.route.pathParameters.map((p) => ({
22
+ key: p.name,
23
+ type: SdkAliasCollection.name(p),
24
+ })),
25
+ ...(props.route.query
26
+ ? [
27
+ {
28
+ key: "query",
29
+ type: ts.factory.createTypeReferenceNode(`${prefix}Query`),
30
+ },
31
+ ]
32
+ : []),
33
+ ...(props.provider
34
+ ? [
35
+ {
36
+ key: "provider",
37
+ type: ts.factory.createTypeReferenceNode(`${prefix}Provider`),
38
+ },
39
+ ]
40
+ : []),
41
+ ];
42
+ };
43
+
44
+ export const getParameterDeclarations = (props: {
45
+ project: INestiaProject;
46
+ route: ITypedWebSocketRoute;
47
+ provider: boolean;
48
+ prefix: boolean;
49
+ }): ts.ParameterDeclaration[] => {
50
+ const entries: IEntry[] = getEntries(props);
51
+ if (entries.length === 0) return [];
52
+ else if (props.project.config.keyword === true) {
53
+ const typeName: string = props.prefix
54
+ ? `${props.route.name}.Props`
55
+ : "Props";
56
+ const node: ts.TypeNode = props.provider
57
+ ? ts.factory.createTypeReferenceNode(typeName)
58
+ : ts.factory.createTypeReferenceNode("Omit", [
59
+ ts.factory.createTypeReferenceNode(typeName),
60
+ ts.factory.createLiteralTypeNode(
61
+ ts.factory.createStringLiteral("provider"),
62
+ ),
63
+ ]);
64
+ return [
65
+ ts.factory.createParameterDeclaration(
66
+ undefined,
67
+ undefined,
68
+ "props",
69
+ undefined,
70
+ node,
71
+ ),
72
+ ];
73
+ }
74
+ return entries.map((entry) =>
75
+ ts.factory.createParameterDeclaration(
76
+ undefined,
77
+ undefined,
78
+ entry.key,
79
+ undefined,
80
+ entry.type,
81
+ ),
82
+ );
83
+ };
84
+
85
+ export const isPathEmpty = (route: ITypedWebSocketRoute): boolean =>
86
+ route.pathParameters.length === 0 && route.query === null;
87
+ }