files.com 1.0.256 → 1.0.258

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "files.com",
3
- "version": "1.0.256",
3
+ "version": "1.0.258",
4
4
  "description": "Files.com SDK for JavaScript",
5
5
  "keywords": [
6
6
  "files.com",
@@ -0,0 +1,38 @@
1
+ [
2
+ [ "filename.txt", "filename.txt" ],
3
+ [ "FiLeNaMe.TxT", "filename.txt" ],
4
+ [ "FILENAME.TXT", "filename.txt" ],
5
+ [ "FÎŁĘÑÂMÉ.TXT", "filename.txt" ],
6
+ [ "Fïłèńämê.Txt", "filename.txt" ],
7
+ [ "a/b/c.txt", "a/b/c.txt" ],
8
+ [ "A\\B\\C.TXT", "a/b/c.txt" ],
9
+ [ "A/B\\C.TXT", "a/b/c.txt" ],
10
+ [ "//a/b//c.txt", "a/b/c.txt" ],
11
+ [ "a/b/c.txt ", "a/b/c.txt" ],
12
+ [ "a/b/c.txt\t", "a/b/c.txt" ],
13
+ [ "a/b/c.txt\n", "a/b/c.txt" ],
14
+ [ "a/b/c.txt\r", "a/b/c.txt" ],
15
+ [ " space_at_beginning", " space_at_beginning"],
16
+ [ "space_at_end ", "space_at_end"],
17
+ [ "tab\tseperated", "tab\tseperated"],
18
+ [ "<title>hello</hello>", "<title>hello</hello>"],
19
+ [ "안녕하세요", "안녕하세요" ],
20
+ [ "こんにちは", "こんにちは" ],
21
+ [ "今日は", "今日は" ],
22
+ [ "longest_unicode_character_﷽", "longest_unicode_character_﷽"],
23
+ [ "invalid_null_byte_before\u0000after", "invalid_null_byte_beforeafter" ],
24
+ [ "a/b/c/../../hello", "a/b/c/hello" ],
25
+ [ "a/b/c/././hello", "a/b/c/hello" ],
26
+ [ "one_code_point_ą", "one_code_point_a" ],
27
+ [ "two_code_points_ą", "two_code_points_a" ],
28
+ [ "one_code_point_훯", "one_code_point_훯"],
29
+ [ "three_code_points_훯", "three_code_points_훯" ],
30
+ [ "ÞþŊŋŦŧ", "þþŋŋŧŧ" ],
31
+ [ "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ", "aaaaaaaeceeeeiiiidnoooooouuuuyssaaaaaaaeceeeeiiiidnoooooouuuuyy" ],
32
+ [ "ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİIJij", "aaaaaaccccccccddddeeeeeeeeeegggggggghhhhiiiiiiiiiijij" ],
33
+ [ "ĴĵĶķĹĺĻļĽľŁłŃńŅņŇňʼnŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤť", "jjkkllllllllnnnnnnʼnoooooooeoerrrrrrsssssssstttt" ],
34
+ [ "ŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽž", "uuuuuuuuuuuuwwyyyzzzzzz" ],
35
+ [ "😂❤️😍🤣😊🙏💕😭😘👍😅👏😁♥️🔥💔💖💙😢🤔😆🙄💪😉☺️👌🤗", "😂❤️😍🤣😊🙏💕😭😘👍😅👏😁♥️🔥💔💖💙😢🤔😆🙄💪😉☺️👌🤗" ],
36
+ [ "💜😔😎😇🌹🤦🎉💞✌️✨🤷😱😌🌸🙌😋💗💚😏💛🙂💓🤩😄😀🖤😃💯🙈👇🎶😒🤭❣️", "💜😔😎😇🌹🤦🎉💞✌️✨🤷😱😌🌸🙌😋💗💚😏💛🙂💓🤩😄😀🖤😃💯🙈👇🎶😒🤭❣️" ],
37
+ [ "emoji_‼️", "emoji_!!️" ]
38
+ ]
@@ -21,6 +21,19 @@ const saveUrlToStream = async (url, stream) => new Promise((resolve, reject) =>
21
21
  })
22
22
  })
23
23
 
24
+ const saveUrlToString = async url => new Promise((resolve, reject) => {
25
+ const https = require('https')
26
+
27
+ https.get(url, response => {
28
+ const chunks = []
29
+ response.on('data', chunk => chunks.push(Buffer.from(chunk)))
30
+ response.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')))
31
+ })
32
+ .on('error', error => {
33
+ reject(error)
34
+ })
35
+ })
36
+
24
37
  const saveUrlToFile = async (url, destinationPath) => {
25
38
  const stream = openDiskFileWriteStream(destinationPath)
26
39
  await saveUrlToStream(url, stream)
@@ -32,4 +45,5 @@ export {
32
45
  openDiskFileWriteStream,
33
46
  saveUrlToFile,
34
47
  saveUrlToStream,
48
+ saveUrlToString,
35
49
  }
@@ -199,6 +199,21 @@ class File {
199
199
  return saveUrlToStream(downloadUri, writableStream)
200
200
  }
201
201
 
202
+ downloadToString = async () => {
203
+ if (isBrowser()) {
204
+ throw new errors.NotImplementedError('String downloads are only available in a NodeJS environment')
205
+ }
206
+
207
+ const downloadUri = this.getDownloadUri()
208
+
209
+ if (!downloadUri) {
210
+ throw new errors.EmptyPropertyError('Current object has no download URI')
211
+ }
212
+
213
+ const { saveUrlToString } = require('../isomorphic/File.node.js')
214
+ return saveUrlToString(downloadUri)
215
+ }
216
+
202
217
  downloadToFile = async destinationPath => {
203
218
  if (isBrowser()) {
204
219
  throw new errors.NotImplementedError('Disk file downloads are only available in a NodeJS environment')
package/test/src/index.js CHANGED
@@ -64,7 +64,7 @@ const testSuite = async () => {
64
64
  Logger.info('***** testFolderListAutoPagination() succeeded! *****')
65
65
  }
66
66
 
67
- const testUploadAndDownload = async () => {
67
+ const testUploadAndDownloadToFile = async () => {
68
68
  const sourceFilePath = '../files.com-logo.png'
69
69
 
70
70
  const displayName = `files.com-logo__${nonce}.png`
@@ -99,7 +99,37 @@ const testSuite = async () => {
99
99
 
100
100
  await file.delete()
101
101
 
102
- Logger.info('***** testUploadAndDownload() succeeded! *****')
102
+ Logger.info('***** testUploadAndDownloadToFile() succeeded! *****')
103
+ }
104
+
105
+ const testUploadAndDownloadToString = async () => {
106
+ const displayName = `test-text__${nonce}.txt`
107
+ const destinationPath = `${SDK_TEST_ROOT_FOLDER}/${displayName}`
108
+
109
+ const sourceFileContents = 'The quick brown fox jumped over the lazy dogs.'
110
+ const file = await File.uploadData(destinationPath, sourceFileContents)
111
+
112
+ assert(!!file.path)
113
+ assert(file.display_name === displayName)
114
+
115
+ const foundFile = await File.find(destinationPath)
116
+
117
+ assert(foundFile.path === destinationPath)
118
+ assert(foundFile.display_name === displayName)
119
+ assert(typeof foundFile.getDownloadUri() === 'undefined')
120
+
121
+ if (!isBrowser()) {
122
+ const downloadableFile = await foundFile.download()
123
+ assert(typeof downloadableFile.getDownloadUri() !== 'undefined')
124
+
125
+ const downloadedFileContents = await downloadableFile.downloadToString()
126
+
127
+ assert(sourceFileContents === downloadedFileContents)
128
+ }
129
+
130
+ await file.delete()
131
+
132
+ Logger.info('***** testUploadAndDownloadToString() succeeded! *****')
103
133
  }
104
134
 
105
135
  /* to run this test, put a file (or symlink) at huge-file.ext * /
@@ -200,7 +230,8 @@ const testSuite = async () => {
200
230
  //
201
231
 
202
232
  await testFolderListAutoPagination()
203
- await testUploadAndDownload()
233
+ await testUploadAndDownloadToFile()
234
+ await testUploadAndDownloadToString()
204
235
  // await testUploadHugeFile() // to run this test, put a file (or symlink) at huge-file.ext
205
236
  await testSession()
206
237
  await testFailure()