diff --git a/templates/nodejs/doc/api/api_doc.md.mustache b/templates/nodejs/doc/api/api_doc.md.mustache index e7746965..72cea7c7 100644 --- a/templates/nodejs/doc/api/api_doc.md.mustache +++ b/templates/nodejs/doc/api/api_doc.md.mustache @@ -25,7 +25,8 @@ All URIs are relative to *{{basePath}}* | Name | Type | Required | Description | | ------------- | ------------- | ------------- | ------------- |{{/-last}}{{/allParams}} {{#allParams}} | **{{paramName}}** | {{#isPrimitiveType}}**{{#isFile}}string \| Readable \| Buffer{{/isFile}}{{^isFile}}{{dataType}}{{/isFile}}**{{/isPrimitiveType}}{{^isPrimitiveType}}{{#isContainer}}**{{dataType}}**{{/isContainer}}{{#isFile}}**{{dataType}}**{{/isFile}}{{^isFile}}{{^isContainer}}[**{{dataType}}**](../model/{{baseType}}.md){{/isContainer}}{{/isFile}}{{/isPrimitiveType}}| {{#required}}**yes**{{/required}}{{^required}}no{{/required}}| {{description}} | -{{/allParams}}{{#vendorExtensions.x-client-chunk-upload}}| **progressListener** | **(event: UploadProgressEvent) => void \| undefined** | no | Optional upload progress listener |{{/vendorExtensions.x-client-chunk-upload}} +{{/allParams}}{{#vendorExtensions.x-client-chunk-upload}}| **progressListener** | **(event: UploadProgressEvent) => void \| undefined** | no | Optional upload progress listener |{{/vendorExtensions.x-client-chunk-upload}}{{#vendorExtensions.x-client-copy-from-response}} +| **{{paramName}}** | **string \| undefined** | no | Optional {{paramName}} |{{/vendorExtensions.x-client-copy-from-response}} ### Return type diff --git a/templates/nodejs/src/api/api.ts.mustache b/templates/nodejs/src/api/api.ts.mustache index f2c36aed..c82bfad9 100644 --- a/templates/nodejs/src/api/api.ts.mustache +++ b/templates/nodejs/src/api/api.ts.mustache @@ -204,10 +204,15 @@ export default class {{classname}} { * @param {{paramName}} {{description}} {{/allParams}} */ - public async {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{#isFile}}{{#vendorExtensions.x-client-chunk-upload}}string{{/vendorExtensions.x-client-chunk-upload}}{{^vendorExtensions.x-client-chunk-upload}}string | Readable | Buffer{{/vendorExtensions.x-client-chunk-upload}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}}{{#vendorExtensions.x-optional-object}} = {}{{/vendorExtensions.x-optional-object}}{{^-last}}, {{/-last}}{{/allParams}}{{#vendorExtensions.x-client-chunk-upload}}, progressListener?: (event: UploadProgressEvent) => void{{/vendorExtensions.x-client-chunk-upload}}): Promise<{{#returnType}}{{{returnType}}}{{/returnType}} {{^returnType}}void{{/returnType}}> { + public async {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{#isFile}}{{#vendorExtensions.x-client-chunk-upload}}string{{/vendorExtensions.x-client-chunk-upload}}{{^vendorExtensions.x-client-chunk-upload}}string | Readable | Buffer{{/vendorExtensions.x-client-chunk-upload}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}}{{#vendorExtensions.x-optional-object}} = {}{{/vendorExtensions.x-optional-object}}{{^-last}}, {{/-last}}{{/allParams}}{{#vendorExtensions.x-client-chunk-upload}}, progressListener?: (event: UploadProgressEvent) => void, {{/vendorExtensions.x-client-chunk-upload}}{{#vendorExtensions.x-client-copy-from-response}}{{paramName}}?: string, {{/vendorExtensions.x-client-copy-from-response}}): Promise<{{#returnType}}{{{returnType}}}{{/returnType}} {{^returnType}}void{{/returnType}}> { {{/vendorExtensions.x-group-parameters}} const queryParams: QueryOptions = {}; queryParams.headers = {}; + {{#vendorExtensions.x-client-chunk-upload}} + const toRelay: { [key: string]: string | undefined } = { + {{#vendorExtensions.x-client-copy-from-response}}{{paramName}}, {{/vendorExtensions.x-client-copy-from-response}} + }; + {{/vendorExtensions.x-client-chunk-upload}} {{#allParams}} {{#required}} {{^isFile}} @@ -301,8 +306,20 @@ export default class {{classname}} { {{#hasFormParams}} const formData = new FormData(); - {{/hasFormParams}} + + {{/hasFormParams}}{{#vendorExtensions.x-client-copy-from-response}} + Object.keys(toRelay).forEach((key) => { + if (toRelay[key] !== undefined) { + formData.append(key, toRelay[key]); + } + }); + {{/vendorExtensions.x-client-copy-from-response}} {{#formParams}} + {{#vendorExtensions.x-client-copy-from-response}} + if ({{paramName}}) { + formData.append('{{paramName}}', {{paramName}}); + } + {{/vendorExtensions.x-client-copy-from-response}} {{#isArray}} if ({{paramName}}) { {{#isCollectionFormatMulti}} @@ -316,7 +333,6 @@ export default class {{classname}} { } {{/isArray}} {{^isArray}} - {{^isFile}} if (typeof {{paramName}} !== undefined) { formData.append('{{baseName}}', {{paramName}}); @@ -362,7 +378,7 @@ export default class {{classname}} { ) as {{{returnType}}}); } let uploadChunkSize = chunkSize; - let lastBody; + let lastBody: {{{returnType}}} | undefined = undefined; let stream; let chunkNumber = 0; @@ -383,6 +399,12 @@ export default class {{classname}} { stream = createReadStream(file, { start: offset, end: uploadChunkSize + offset - 1}); chunkFormData.append(filename, stream, filename); + Object.keys(toRelay).forEach((key) => { + if (toRelay[key] !== undefined) { + chunkFormData.append(key, toRelay[key]); + } + }); + queryParams.body = chunkFormData; queryParams.headers['Content-Range'] = `part ${part}/${partsCount}`; part++; @@ -407,6 +429,12 @@ export default class {{classname}} { "{{{returnType}}}", "{{returnFormat}}" ) as {{{returnType}}}); + Object.keys(toRelay).forEach((key) => { + if ((lastBody as unknown as any)[key] !== undefined) { + toRelay[key] = (lastBody as unknown as any)[key]; + } + }); + stream.close(); }