@f3liz/rescript-autogen-openapi 0.5.3 → 0.6.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.
@@ -1,7 +1,8 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
+ import * as Templates from "../core/Templates.mjs";
4
+ import * as Handlebars from "../bindings/Handlebars.mjs";
3
5
  import * as SpecDiffer from "../core/SpecDiffer.mjs";
4
- import * as CodegenUtils from "../core/CodegenUtils.mjs";
5
6
  import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
6
7
  import * as Primitive_string from "@rescript/runtime/lib/es6/Primitive_string.js";
7
8
 
@@ -84,32 +85,15 @@ function generateCompactSummary(diff) {
84
85
  }
85
86
 
86
87
  function generateMergeReport(stats, baseName, forkName) {
87
- let sharedEndpoints = stats.sharedEndpointCount.toString();
88
- let sharedSchemas = stats.sharedSchemaCount.toString();
89
- let extensionEndpoints = stats.forkExtensionCount.toString();
90
- let extensionSchemas = stats.forkSchemaCount.toString();
91
- return CodegenUtils.trimMargin(`
92
- |# Merge Report: ` + baseName + ` + ` + forkName + `
93
- |
94
- |## Shared Code
95
- |
96
- |- **Shared Endpoints**: ` + sharedEndpoints + `
97
- |- **Shared Schemas**: ` + sharedSchemas + `
98
- |
99
- |## ` + forkName + ` Extensions
100
- |
101
- |- **Extension Endpoints**: ` + extensionEndpoints + `
102
- |- **Extension Schemas**: ` + extensionSchemas + `
103
- |
104
- |## Summary
105
- |
106
- |The shared base contains ` + sharedEndpoints + ` endpoints and ` + sharedSchemas + ` schemas.
107
- |
108
- |` + forkName + ` adds ` + extensionEndpoints + ` endpoints and ` + extensionSchemas + ` schemas.
109
- |
110
- |---
111
- |*Generated on ` + new Date().toISOString() + `*
112
- |`, undefined);
88
+ return Handlebars.render(Templates.mergeReport, {
89
+ baseName: baseName,
90
+ forkName: forkName,
91
+ sharedEndpoints: stats.sharedEndpointCount.toString(),
92
+ sharedSchemas: stats.sharedSchemaCount.toString(),
93
+ extensionEndpoints: stats.forkExtensionCount.toString(),
94
+ extensionSchemas: stats.forkSchemaCount.toString(),
95
+ timestamp: new Date().toISOString()
96
+ });
113
97
  }
114
98
 
115
99
  function generateEndpointsByTagReport(endpoints) {
@@ -152,4 +136,4 @@ export {
152
136
  generateMergeReport,
153
137
  generateEndpointsByTagReport,
154
138
  }
155
- /* CodegenUtils Not a pure module */
139
+ /* Handlebars Not a pure module */
@@ -1,5 +1,7 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
+ import * as Templates from "../core/Templates.mjs";
4
+ import * as Handlebars from "../bindings/Handlebars.mjs";
3
5
  import * as DocOverride from "../core/DocOverride.mjs";
4
6
  import * as CodegenUtils from "../core/CodegenUtils.mjs";
5
7
  import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
@@ -85,22 +87,18 @@ function generateEndpointFunction(endpoint, overrideDir, moduleName) {
85
87
  description = endpoint.description;
86
88
  }
87
89
  let docComment = CodegenUtils.generateDocString(endpoint.summary, description, undefined);
88
- let code = `
89
- |` + docComment.trimEnd() + `
90
- |let ` + functionName + ` = (` + bodyParam + paramSep + `~fetch: ` + CodegenUtils.fetchTypeSignature + `): promise<` + functionName + `Response> => {
91
- |` + bodyValueConversion + `
92
- | fetch(
93
- | ~url="` + endpoint.path + `",
94
- | ~method_="` + endpoint.method.toUpperCase() + `",
95
- | ~body=` + (
96
- hasRequestBody ? "Some(jsonBody)" : "None"
97
- ) + `,
98
- | )->Promise.then(response => {
99
- |` + responseHandling + `
100
- | ->Promise.resolve
101
- | })
102
- |}`;
103
- return CodegenUtils.trimMargin(code, undefined);
90
+ return Handlebars.render(Templates.endpointFunction, {
91
+ docComment: docComment,
92
+ functionName: functionName,
93
+ bodyParam: bodyParam,
94
+ paramSep: paramSep,
95
+ fetchTypeSignature: CodegenUtils.fetchTypeSignature,
96
+ bodyValueConversion: bodyValueConversion,
97
+ path: endpoint.path,
98
+ methodUpper: endpoint.method.toUpperCase(),
99
+ bodyArg: hasRequestBody ? "Some(jsonBody)" : "None",
100
+ responseHandling: responseHandling
101
+ });
104
102
  }
105
103
 
106
104
  function generateEndpointCode(endpoint, overrideDir, moduleName, modulePrefixOpt) {
@@ -132,26 +130,22 @@ function generateEndpointModule(endpoint, modulePrefixOpt) {
132
130
  let modulePrefix = modulePrefixOpt !== undefined ? modulePrefixOpt : "";
133
131
  let functionName = CodegenUtils.generateOperationName(endpoint.operationId, endpoint.path, endpoint.method);
134
132
  let header = CodegenUtils.generateFileHeader(Stdlib_Option.getOr(endpoint.summary, `API: ` + endpoint.path));
135
- return CodegenUtils.trimMargin(`
136
- |` + header.trimEnd() + `
137
- |
138
- |module ` + JsConvertCase.toPascalCase(functionName) + ` = {
139
- |` + CodegenUtils.indent(generateEndpointCode(endpoint, undefined, undefined, modulePrefix), 2) + `
140
- |}
141
- |`, undefined);
133
+ return Handlebars.render(Templates.moduleWrapped, {
134
+ header: header.trimEnd(),
135
+ moduleName: JsConvertCase.toPascalCase(functionName),
136
+ body: CodegenUtils.indent(generateEndpointCode(endpoint, undefined, undefined, modulePrefix), 2)
137
+ });
142
138
  }
143
139
 
144
140
  function generateEndpointsModule(moduleName, endpoints, description, overrideDir, modulePrefixOpt) {
145
141
  let modulePrefix = modulePrefixOpt !== undefined ? modulePrefixOpt : "";
146
142
  let header = CodegenUtils.generateFileHeader(Stdlib_Option.getOr(description, `API for ` + moduleName));
147
143
  let body = endpoints.map(ep => CodegenUtils.indent(generateEndpointCode(ep, overrideDir, moduleName, modulePrefix), 2)).join("\n\n");
148
- return CodegenUtils.trimMargin(`
149
- |` + header.trimEnd() + `
150
- |
151
- |module ` + moduleName + ` = {
152
- |` + body + `
153
- |}
154
- |`, undefined);
144
+ return Handlebars.render(Templates.moduleWrapped, {
145
+ header: header.trimEnd(),
146
+ moduleName: moduleName,
147
+ body: body
148
+ });
155
149
  }
156
150
 
157
151
  function generateEndpointSignature(endpoint) {
@@ -170,4 +164,4 @@ export {
170
164
  generateEndpointsModule,
171
165
  generateEndpointSignature,
172
166
  }
173
- /* DocOverride Not a pure module */
167
+ /* Handlebars Not a pure module */
@@ -10,14 +10,6 @@ import * as Primitive_string from "@rescript/runtime/lib/es6/Primitive_string.js
10
10
  import * as GenerationContext from "../types/GenerationContext.mjs";
11
11
  import * as ReferenceResolver from "../core/ReferenceResolver.mjs";
12
12
 
13
- function cannotSetDefault(schemaCode) {
14
- if (schemaCode.includes("S.dict(")) {
15
- return true;
16
- } else {
17
- return schemaCode.includes("S.object(");
18
- }
19
- }
20
-
21
13
  function nullableToOption(schemaCode) {
22
14
  if (schemaCode.startsWith("S.nullableAsOption(")) {
23
15
  return "S.option(" + schemaCode.slice("S.nullableAsOption(".length);
@@ -125,15 +117,9 @@ function generateSchemaWithContext(ctx, depthOpt, extractedTypeMap, irType) {
125
117
  if (param[2]) {
126
118
  return ` ` + camelName + `: s.field("` + name + `", ` + schemaCode + `),`;
127
119
  } else if (alreadyNullable) {
128
- if (cannotSetDefault(schemaCode)) {
129
- return ` ` + camelName + `: s.field("` + name + `", ` + nullableToOption(schemaCode) + `),`;
130
- } else {
131
- return ` ` + camelName + `: s.fieldOr("` + name + `", ` + schemaCode + `, None),`;
132
- }
133
- } else if (cannotSetDefault(schemaCode)) {
134
- return ` ` + camelName + `: s.field("` + name + `", S.option(` + schemaCode + `)),`;
120
+ return ` ` + camelName + `: s.field("` + name + `", ` + nullableToOption(schemaCode) + `),`;
135
121
  } else {
136
- return ` ` + camelName + `: s.fieldOr("` + name + `", S.nullableAsOption(` + schemaCode + `), None),`;
122
+ return ` ` + camelName + `: s.field("` + name + `", S.option(` + schemaCode + `)),`;
137
123
  }
138
124
  }).join("\n");
139
125
  return `S.object(s => {\n` + fields + `\n })`;
@@ -321,15 +307,9 @@ function generateSchemaWithContext(ctx, depthOpt, extractedTypeMap, irType) {
321
307
  if (param[2]) {
322
308
  return ` ` + camelName + `: s.field("` + name + `", ` + schemaCode + `),`;
323
309
  } else if (alreadyNullable) {
324
- if (cannotSetDefault(schemaCode)) {
325
- return ` ` + camelName + `: s.field("` + name + `", ` + nullableToOption(schemaCode) + `),`;
326
- } else {
327
- return ` ` + camelName + `: s.fieldOr("` + name + `", ` + schemaCode + `, None),`;
328
- }
329
- } else if (cannotSetDefault(schemaCode)) {
330
- return ` ` + camelName + `: s.field("` + name + `", S.option(` + schemaCode + `)),`;
310
+ return ` ` + camelName + `: s.field("` + name + `", ` + nullableToOption(schemaCode) + `),`;
331
311
  } else {
332
- return ` ` + camelName + `: s.fieldOr("` + name + `", S.nullableAsOption(` + schemaCode + `), None),`;
312
+ return ` ` + camelName + `: s.field("` + name + `", S.option(` + schemaCode + `)),`;
333
313
  }
334
314
  }).join("\n");
335
315
  return `S.object(s => ` + constructorName + `({\n` + fields + `\n }))`;
@@ -422,15 +402,9 @@ function generateSchemaWithContext(ctx, depthOpt, extractedTypeMap, irType) {
422
402
  if (param[2]) {
423
403
  return ` ` + camelName + `: s.field("` + name + `", ` + schemaCode + `),`;
424
404
  } else if (alreadyNullable) {
425
- if (cannotSetDefault(schemaCode)) {
426
- return ` ` + camelName + `: s.field("` + name + `", ` + nullableToOption(schemaCode) + `),`;
427
- } else {
428
- return ` ` + camelName + `: s.fieldOr("` + name + `", ` + schemaCode + `, None),`;
429
- }
430
- } else if (cannotSetDefault(schemaCode)) {
431
- return ` ` + camelName + `: s.field("` + name + `", S.option(` + schemaCode + `)),`;
405
+ return ` ` + camelName + `: s.field("` + name + `", ` + nullableToOption(schemaCode) + `),`;
432
406
  } else {
433
- return ` ` + camelName + `: s.fieldOr("` + name + `", S.nullableAsOption(` + schemaCode + `), None),`;
407
+ return ` ` + camelName + `: s.field("` + name + `", S.option(` + schemaCode + `)),`;
434
408
  }
435
409
  }).join("\n");
436
410
  return `S.object(s => {\n` + fields$1 + `\n })`;
@@ -479,15 +453,9 @@ function generateSchemaWithContext(ctx, depthOpt, extractedTypeMap, irType) {
479
453
  if (param[2]) {
480
454
  return ` ` + camelName + `: s.field("` + name + `", ` + schemaCode + `),`;
481
455
  } else if (alreadyNullable) {
482
- if (cannotSetDefault(schemaCode)) {
483
- return ` ` + camelName + `: s.field("` + name + `", ` + nullableToOption(schemaCode) + `),`;
484
- } else {
485
- return ` ` + camelName + `: s.fieldOr("` + name + `", ` + schemaCode + `, None),`;
486
- }
487
- } else if (cannotSetDefault(schemaCode)) {
488
- return ` ` + camelName + `: s.field("` + name + `", S.option(` + schemaCode + `)),`;
456
+ return ` ` + camelName + `: s.field("` + name + `", ` + nullableToOption(schemaCode) + `),`;
489
457
  } else {
490
- return ` ` + camelName + `: s.fieldOr("` + name + `", S.nullableAsOption(` + schemaCode + `), None),`;
458
+ return ` ` + camelName + `: s.field("` + name + `", S.option(` + schemaCode + `)),`;
491
459
  }
492
460
  }).join("\n");
493
461
  return `S.object(s => {\n` + fields$2 + `\n })`;
@@ -574,7 +542,6 @@ let addWarning = GenerationContext.addWarning;
574
542
 
575
543
  export {
576
544
  addWarning,
577
- cannotSetDefault,
578
545
  nullableToOption,
579
546
  applyConstraints,
580
547
  generateSchemaWithContext,
@@ -1,8 +1,10 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
3
  import * as Pipeline from "../core/Pipeline.mjs";
4
+ import * as Templates from "../core/Templates.mjs";
4
5
  import * as Belt_Array from "@rescript/runtime/lib/es6/Belt_Array.js";
5
6
  import * as FileSystem from "../core/FileSystem.mjs";
7
+ import * as Handlebars from "../bindings/Handlebars.mjs";
6
8
  import * as CodegenUtils from "../core/CodegenUtils.mjs";
7
9
  import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
8
10
  import * as OpenAPIParser from "../core/OpenAPIParser.mjs";
@@ -66,19 +68,16 @@ function generateTagModuleFile(tag, endpoints, $staropt$star, $staropt$star$1, o
66
68
  let header = CodegenUtils.generateFileHeader(`API endpoints for ` + tag);
67
69
  let body = endpoints.map(endpoint => EndpointGenerator.generateEndpointCode(endpoint, overrideDir, moduleName, undefined)).join("\n\n");
68
70
  if (wrapInModule) {
69
- return CodegenUtils.trimMargin(`
70
- |` + header.trimEnd() + `
71
- |
72
- |module ` + moduleName + ` = {
73
- |` + CodegenUtils.indent(body, 2) + `
74
- |}
75
- |`, undefined);
71
+ return Handlebars.render(Templates.moduleWrapped, {
72
+ header: header.trimEnd(),
73
+ moduleName: moduleName,
74
+ body: CodegenUtils.indent(body, 2)
75
+ });
76
76
  } else {
77
- return CodegenUtils.trimMargin(`
78
- |` + header.trimEnd() + `
79
- |
80
- |` + body + `
81
- |`, undefined);
77
+ return Handlebars.render(Templates.moduleUnwrapped, {
78
+ header: header.trimEnd(),
79
+ body: body
80
+ });
82
81
  }
83
82
  }
84
83
 
@@ -98,29 +97,24 @@ function generateAllTagModules(endpoints, includeSchemasOpt, wrapInModuleOpt, ov
98
97
  function generateIndexModule(tags, moduleNameOpt) {
99
98
  let moduleName = moduleNameOpt !== undefined ? moduleNameOpt : "API";
100
99
  let header = CodegenUtils.generateFileHeader("Main API module index");
101
- let modules = tags.toSorted(Primitive_string.compare).map(tag => {
102
- let m = JsConvertCase.toPascalCase(tag);
103
- return ` module ` + m + ` = ` + m;
104
- }).join("\n");
105
- return CodegenUtils.trimMargin(`
106
- |` + header.trimEnd() + `
107
- |
108
- |module ` + moduleName + ` = {
109
- |` + modules + `
110
- |}
111
- |`, undefined);
100
+ let tagData = tags.toSorted(Primitive_string.compare).map(tag => ({
101
+ modulePascal: JsConvertCase.toPascalCase(tag)
102
+ }));
103
+ return Handlebars.render(Templates.indexModule, {
104
+ header: header.trimEnd(),
105
+ moduleName: moduleName,
106
+ tags: tagData
107
+ });
112
108
  }
113
109
 
114
110
  function generateFlatModuleCode(moduleName, endpoints, overrideDir) {
115
111
  let header = CodegenUtils.generateFileHeader(`All API endpoints in ` + moduleName);
116
112
  let body = endpoints.map(endpoint => CodegenUtils.indent(EndpointGenerator.generateEndpointCode(endpoint, overrideDir, moduleName, undefined), 2)).join("\n\n");
117
- return CodegenUtils.trimMargin(`
118
- |` + header.trimEnd() + `
119
- |
120
- |module ` + moduleName + ` = {
121
- |` + body + `
122
- |}
123
- |`, undefined);
113
+ return Handlebars.render(Templates.moduleWrapped, {
114
+ header: header.trimEnd(),
115
+ moduleName: moduleName,
116
+ body: body
117
+ });
124
118
  }
125
119
 
126
120
  function internalGenerateIntegratedModule(name, description, endpoints, schemas, overrideDir, isExtensionOpt, includeHeaderOpt) {
@@ -169,13 +163,11 @@ function generateCombinedModule(forkName, sharedEndpoints, extensionEndpoints, s
169
163
  let header = CodegenUtils.generateFileHeader(`Combined Shared and ` + forkName + ` extensions`);
170
164
  let shared = generateSharedModule(sharedEndpoints, sharedSchemas, overrideDir, false);
171
165
  let extension = generateExtensionModule(forkName, extensionEndpoints, extensionSchemas, overrideDir, false);
172
- return CodegenUtils.trimMargin(`
173
- |` + header.trimEnd() + `
174
- |
175
- |` + shared + `
176
- |
177
- |` + extension + `
178
- |`, undefined);
166
+ return Handlebars.render(Templates.combinedModule, {
167
+ header: header.trimEnd(),
168
+ shared: shared,
169
+ extension: extension
170
+ });
179
171
  }
180
172
 
181
173
  function generateTagModuleFiles(endpoints, outputDir, wrapInModuleOpt, overrideDir) {
@@ -1,5 +1,7 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
+ import * as Templates from "../core/Templates.mjs";
4
+ import * as Handlebars from "../bindings/Handlebars.mjs";
3
5
  import * as CodegenUtils from "../core/CodegenUtils.mjs";
4
6
  import * as OpenAPIParser from "../core/OpenAPIParser.mjs";
5
7
  import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
@@ -59,12 +61,13 @@ function generateEndpointModule(path, method, operation) {
59
61
  )
60
62
  );
61
63
  let schemasCode = generateOperationSchemas(operationId, operation);
62
- return docComment + `module ` + JsConvertCase.toPascalCase(operationId) + ` = {
63
- ` + CodegenUtils.indent(schemasCode, 2) + `
64
-
65
- let endpoint = "` + path + `"
66
- let method = #` + methodStr + `
67
- }`;
64
+ return Handlebars.render(Templates.endpointModule, {
65
+ docComment: docComment,
66
+ moduleName: JsConvertCase.toPascalCase(operationId),
67
+ schemasCode: CodegenUtils.indent(schemasCode, 2),
68
+ path: path,
69
+ methodStr: methodStr
70
+ });
68
71
  }
69
72
 
70
73
  export {
@@ -74,4 +77,4 @@ export {
74
77
  generateOperationSchemas,
75
78
  generateEndpointModule,
76
79
  }
77
- /* CodegenUtils Not a pure module */
80
+ /* Handlebars Not a pure module */
@@ -1,30 +1,24 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
3
  import * as Pipeline from "../core/Pipeline.mjs";
4
+ import * as Templates from "../core/Templates.mjs";
4
5
  import * as FileSystem from "../core/FileSystem.mjs";
6
+ import * as Handlebars from "../bindings/Handlebars.mjs";
5
7
  import * as CodegenUtils from "../core/CodegenUtils.mjs";
6
8
  import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
7
9
  import * as OpenAPIParser from "../core/OpenAPIParser.mjs";
8
10
  import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
9
11
  import * as JsConvertCase from "js-convert-case";
10
12
 
11
- let clientTypeCode = CodegenUtils.trimMargin(`
12
- |type client = {
13
- | baseUrl: string,
14
- | token: option<string>,
15
- | fetch: ` + CodegenUtils.fetchTypeSignature + `,
16
- |}
17
- |`, undefined);
13
+ let clientTypeCode = Handlebars.render(Templates.clientType, {
14
+ fetchTypeSignature: CodegenUtils.fetchTypeSignature
15
+ });
18
16
 
19
17
  function generateConnectFunction(title) {
20
- return CodegenUtils.trimMargin(`
21
- |/** Create a client for ` + title + ` */
22
- |let connect = (~baseUrl: string, ~token: option<string>=?, ~fetch: ` + CodegenUtils.fetchTypeSignature + `, ()): client => {
23
- | baseUrl,
24
- | token,
25
- | fetch,
26
- |}
27
- |`, undefined);
18
+ return Handlebars.render(Templates.connectFunction, {
19
+ title: title,
20
+ fetchTypeSignature: CodegenUtils.fetchTypeSignature
21
+ });
28
22
  }
29
23
 
30
24
  function generateWrapperFunction(endpoint, generatedModuleName) {
@@ -42,8 +36,13 @@ function generateWrapperFunction(endpoint, generatedModuleName) {
42
36
  });
43
37
  let signature = hasRequestBody ? `let ` + operationName + ` = (request: ` + generatedModuleName + `.` + operationName + `Request, ~client: client)` : `let ` + operationName + ` = (~client: client)`;
44
38
  let callArguments = hasRequestBody ? "~body=request, " : "";
45
- return docComment + ` ` + signature + `: promise<` + generatedModuleName + `.` + operationName + `Response> =>
46
- ` + generatedModuleName + `.` + operationName + `(` + callArguments + `~fetch=client.fetch)`;
39
+ return Handlebars.render(Templates.wrapperFunction, {
40
+ docComment: docComment,
41
+ signature: signature,
42
+ generatedModuleName: generatedModuleName,
43
+ operationName: operationName,
44
+ callArguments: callArguments
45
+ });
47
46
  }
48
47
 
49
48
  function generateWrapper(spec, endpoints, extensionEndpointsOpt, outputDir, wrapperModuleNameOpt, generatedModulePrefixOpt, baseModulePrefixOpt) {
@@ -75,13 +74,11 @@ function generateWrapper(spec, endpoints, extensionEndpointsOpt, outputDir, wrap
75
74
  }).join("\n\n");
76
75
  return `module ` + moduleName + ` = {\n` + wrapperFunctions + `\n}`;
77
76
  }).join("\n\n");
78
- let fileContent = `// Generated thin wrapper
79
-
80
- ` + clientTypeCode + `
81
-
82
- ` + generateConnectFunction(spec.info.title) + `
83
-
84
- ` + modulesCode;
77
+ let fileContent = Handlebars.render(Templates.wrapperFile, {
78
+ clientTypeCode: clientTypeCode,
79
+ connectFunctionCode: generateConnectFunction(spec.info.title),
80
+ modulesCode: modulesCode
81
+ });
85
82
  return Pipeline.fromFilesAndWarnings([{
86
83
  path: FileSystem.makePath(outputDir, wrapperModuleName + `.res`),
87
84
  content: fileContent
@@ -1,6 +1,8 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
+ import * as Templates from "../core/Templates.mjs";
3
4
  import * as FileSystem from "../core/FileSystem.mjs";
5
+ import * as Handlebars from "../bindings/Handlebars.mjs";
4
6
  import * as CodegenUtils from "../core/CodegenUtils.mjs";
5
7
  import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
6
8
  import * as OpenAPIParser from "../core/OpenAPIParser.mjs";
@@ -41,24 +43,44 @@ function generateResponseInterface(endpoint, functionName) {
41
43
 
42
44
  function generateMethodSignature(endpoint, functionName) {
43
45
  let params = Stdlib_Option.isSome(endpoint.requestBody) ? `client: MisskeyClient, request: ` + JsConvertCase.toPascalCase(functionName) + `Request` : "client: MisskeyClient";
44
- let docLines = Stdlib_Option.mapOr(endpoint.summary, [], summary => {
45
- let lines = [
46
- " /**",
47
- ` * ` + summary
48
- ];
49
- Stdlib_Option.forEach(endpoint.description, description => {
50
- if (description !== summary) {
51
- lines.push(` * ` + description);
52
- return;
46
+ let match = endpoint.summary;
47
+ let match$1 = endpoint.description;
48
+ let docLines;
49
+ if (match !== undefined) {
50
+ if (match$1 !== undefined) {
51
+ if (match === match$1) {
52
+ docLines = ` /** ` + match + ` */`;
53
+ } else {
54
+ let descLines = match$1.split("\n").map(line => {
55
+ if (line === "") {
56
+ return " *";
57
+ } else {
58
+ return ` * ` + line;
59
+ }
60
+ });
61
+ docLines = ` /**\n * ` + match + `\n *\n` + descLines.join("\n") + `\n */`;
62
+ }
63
+ } else {
64
+ docLines = ` /** ` + match + ` */`;
65
+ }
66
+ } else if (match$1 !== undefined) {
67
+ let lines = match$1.split("\n").map(line => {
68
+ if (line === "") {
69
+ return " *";
70
+ } else {
71
+ return ` * ` + line;
53
72
  }
54
73
  });
55
- lines.push(" */");
56
- return lines;
74
+ docLines = ` /**\n` + lines.join("\n") + `\n */`;
75
+ } else {
76
+ docLines = "";
77
+ }
78
+ return Handlebars.render(Templates.methodSignature, {
79
+ docLines: docLines,
80
+ functionName: functionName,
81
+ params: params,
82
+ responsePascalName: JsConvertCase.toPascalCase(functionName)
57
83
  });
58
- let code = `
59
- |` + docLines.join("\n") + `
60
- | ` + functionName + `(` + params + `): Promise<` + JsConvertCase.toPascalCase(functionName) + `Response>;`;
61
- return CodegenUtils.trimMargin(code, undefined);
62
84
  }
63
85
 
64
86
  function generateModuleDts(moduleName, endpoints) {
@@ -72,25 +94,11 @@ function generateModuleDts(moduleName, endpoints) {
72
94
  ].filter(s => s !== "").join("\n");
73
95
  }).join("\n\n");
74
96
  let methodSignatures = endpoints.map(endpoint => generateMethodSignature(endpoint, CodegenUtils.generateOperationName(endpoint.operationId, endpoint.path, endpoint.method))).join("\n");
75
- let header = CodegenUtils.trimMargin(`
76
- |// TypeScript definitions for ` + moduleName + `
77
- |// Generated by @f3liz/rescript-autogen-openapi
78
- |// DO NOT EDIT
79
- |
80
- |import { MisskeyClient } from './index';
81
- |import * as ComponentSchemas from './ComponentSchemas';
82
- |`, undefined);
83
- return CodegenUtils.trimMargin(`
84
- |` + header + `
85
- |
86
- |` + interfaces + `
87
- |
88
- |export interface ` + moduleName + `Module {
89
- |` + methodSignatures + `
90
- |}
91
- |
92
- |export const ` + moduleName + `: ` + moduleName + `Module;
93
- |`, undefined);
97
+ return Handlebars.render(Templates.moduleDts, {
98
+ moduleName: moduleName,
99
+ interfaces: interfaces,
100
+ methodSignatures: methodSignatures
101
+ });
94
102
  }
95
103
 
96
104
  function generateComponentSchemasDts(schemas) {
@@ -98,33 +106,19 @@ function generateComponentSchemasDts(schemas) {
98
106
  let schema = param[1];
99
107
  return generateTypeScriptType(param[0], schema.description, schema);
100
108
  }).join("\n\n");
101
- return CodegenUtils.trimMargin(`
102
- |// TypeScript definitions for ComponentSchemas
103
- |// Generated by @f3liz/rescript-autogen-openapi
104
- |// DO NOT EDIT
105
- |
106
- |` + content + `
107
- |`, undefined);
109
+ return Handlebars.render(Templates.componentSchemasDts, {
110
+ content: content
111
+ });
108
112
  }
109
113
 
110
114
  function generateIndexDts(moduleNames) {
111
- let imports = moduleNames.map(m => `import { ` + m + `Module } from './` + m + `';`).join("\n");
112
- let $$exports = moduleNames.map(m => `export const ` + m + `: ` + m + `Module;`).join("\n");
113
- return CodegenUtils.trimMargin(`
114
- |// TypeScript definitions
115
- |// Generated by @f3liz/rescript-autogen-openapi
116
- |// DO NOT EDIT
117
- |
118
- |` + imports + `
119
- |
120
- |export class MisskeyClient {
121
- | constructor(baseUrl: string, token?: string);
122
- | readonly baseUrl: string;
123
- | readonly token?: string;
124
- |}
125
- |
126
- |` + $$exports + `
127
- |`, undefined);
115
+ let modules = moduleNames.map(m => ({
116
+ importLine: `import { ` + m + `Module } from './` + m + `';`,
117
+ exportLine: `export const ` + m + `: ` + m + `Module;`
118
+ }));
119
+ return Handlebars.render(Templates.indexDts, {
120
+ modules: modules
121
+ });
128
122
  }
129
123
 
130
124
  function generate(spec, endpoints, outputDir) {