Skip to content

Commit 379ff46

Browse files
committed
feat: docstrings for InputFile class
1 parent 5a3a672 commit 379ff46

File tree

2 files changed

+67
-16
lines changed

2 files changed

+67
-16
lines changed

templates/node/index.d.ts.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ declare module "{{ language.params.npmPackage|caseDash }}" {
250250
* @throws {{ '{' }}{{ spec.title | caseUcfirst}}Exception}
251251
* @returns {Promise}
252252
*/
253-
{{ method.name | caseCamel }}{% if generics %}<{{generics}}>{% endif %}({% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | typeName }}{% if not loop.last %}, {% endif %}{% endfor %}): Promise<{% if method.type == 'location' %}Buffer{% else %}{% if method.responseModel and method.responseModel != 'any' %}{% if not spec.definitions[method.responseModel].additionalProperties %}Models.{% endif %}{{method.responseModel | caseUcfirst}}{% if generics_return %}<{{generics_return}}>{% endif %}{% else %}{% if method.method == 'delete' %}string{% else %}any{% endif %}{% endif %}{% endif %}>;
253+
{{ method.name | caseCamel }}{% if generics %}<{{generics}}>{% endif %}({% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | typeName }}{% if not loop.last %}, {% endif %}{% endfor %}): Promise<{% if method.type == 'location' %}ArrayBuffer{% else %}{% if method.responseModel and method.responseModel != 'any' %}{% if not spec.definitions[method.responseModel].additionalProperties %}Models.{% endif %}{{method.responseModel | caseUcfirst}}{% if generics_return %}<{{generics_return}}>{% endif %}{% else %}{% if method.method == 'delete' %}string{% else %}any{% endif %}{% endif %}{% endif %}>;
254254
{% endfor %}
255255
}
256256
{% endfor %}

templates/node/lib/inputFile.js.twig

Lines changed: 66 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,96 @@
1-
const { readFileSync } = require("fs");
1+
const fs = require("fs");
22
const { ReadableStream } = require("stream/web");
33

4-
const _bufferToString = (buffer) => {
4+
/**
5+
* @param {fs.ReadStream} readStream
6+
* @returns {ReadableStream}
7+
*/
8+
function convertReadStreamToReadableStream(readStream) {
9+
return new ReadableStream({
10+
start(controller) {
11+
readStream.on("data", (chunk) => {
12+
controller.enqueue(chunk);
13+
});
14+
readStream.on("end", () => {
15+
controller.close();
16+
});
17+
readStream.on("error", (err) => {
18+
controller.error(err);
19+
});
20+
},
21+
cancel() {
22+
readStream.destroy();
23+
},
24+
});
25+
}
26+
27+
/**
28+
* @param {Buffer} buffer
29+
* @returns {ReadableStream}
30+
*/
31+
function bufferToReadableStream(buffer) {
532
return new ReadableStream({
633
start(controller) {
734
controller.enqueue(buffer);
835
controller.close();
936
},
1037
});
11-
};
38+
}
1239

1340
class InputFile {
14-
stream; // Content of file as a stream
15-
size; // Total final size of the file content
16-
filename; // File name
41+
/** @type {ReadableStream} Content of file as a stream */
42+
stream;
43+
44+
/** @type {number} Total final size of the file content */
45+
size;
1746

47+
/** @type {string} File name */
48+
filename;
49+
50+
/**
51+
* @param {string} filePath
52+
* @param {string} filename
53+
* @returns {InputFile}
54+
*/
1855
static fromPath = (filePath, filename) => {
19-
const data = readFileSync(filePath);
20-
const stream = _bufferToString(data);
21-
const size = data.byteLength;
56+
const nodeStream = fs.createReadStream(filePath);
57+
const stream = convertReadStreamToReadableStream(nodeStream);
58+
const size = fs.statSync(filePath).size;
2259
return new InputFile(stream, filename, size);
2360
};
2461

62+
/**
63+
* @param {Buffer} buffer
64+
* @param {string} filename
65+
* @returns {InputFile}
66+
*/
2567
static fromBuffer = (buffer, filename) => {
26-
const stream = _bufferToString(buffer);
68+
const stream = bufferToReadableStream(buffer);
2769
const size = buffer.byteLength;
2870
return new InputFile(stream, filename, size);
2971
};
3072

73+
/**
74+
* @param {string} content
75+
* @param {string} filename
76+
* @returns {InputFile}
77+
*/
3178
static fromPlainText = (content, filename) => {
32-
const buffer = new TextEncoder().encode(content);
33-
const stream = _bufferToString(buffer);
34-
const size = buffer.byteLength;
35-
return new InputFile(stream, filename, size);
79+
const array = new TextEncoder().encode(content);
80+
const buffer = Buffer.from(array);
81+
return InputFile.fromBuffer(buffer, filename);
3682
};
3783

84+
/**
85+
* @param {ReadableStream} stream
86+
* @param {string} filename
87+
* @param {number} size
88+
*/
3889
constructor(stream, filename, size) {
3990
this.stream = stream;
4091
this.filename = filename;
4192
this.size = size;
4293
}
4394
}
4495

45-
module.exports = InputFile;
96+
module.exports = InputFile;

0 commit comments

Comments
 (0)