Skip to content

Commit 499074c

Browse files
committed
Added toplevel support for aws s3 and updated packages
1 parent 7f9477d commit 499074c

File tree

8 files changed

+183
-22
lines changed

8 files changed

+183
-22
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"bootstrap": "lerna bootstrap",
77
"build": "lerna run build",
88
"clean": "rimraf packages/**/dist packages/**/*.tsbuildinfo",
9+
"update": "yarn upgrade-interactive --latest",
910
"release": "yarn clean && yarn build && lerna publish"
1011
},
1112
"devDependencies": {

packages/aws/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
],
2424
"gitHead": "b05db75f50e3a44fd01b8c95d114f3fb5c9801c3",
2525
"dependencies": {
26-
"aws-sdk": "^2.668.0",
26+
"aws-sdk": "^2.678.0",
2727
"storage-core": "^0.6.2"
2828
},
2929
"keywords": [

packages/aws/src/AwsS3Storage.ts

Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11
import { Storage, FilesReadable, ListResult } from 'storage-core'
22
import { S3, AWSError } from 'aws-sdk'
3+
import pathModule from 'path'
34

45
import { Readable, PassThrough, Writable } from 'stream'
56
import { AwsS3StorageOptions } from './AwsS3StorageOptions'
67
import { PromiseResult } from 'aws-sdk/lib/request'
78

9+
const formatContent = (f: S3.Object) => ({
10+
path: f.Key || '',
11+
name: pathModule.basename(f.Key || ''),
12+
size: f.Size,
13+
updatedAt: f.LastModified,
14+
md5Hash: f.ETag,
15+
isFile: true,
16+
raw: f as object
17+
})
18+
819
export class AwsS3Storage extends Storage<AwsS3StorageOptions> {
920
s3: S3
1021

@@ -13,8 +24,35 @@ export class AwsS3Storage extends Storage<AwsS3StorageOptions> {
1324
this.s3 = new S3({ ...options })
1425
}
1526

16-
getTopLevel(_?: string): Promise<ListResult[]> {
17-
throw new Error('Method not implemented.')
27+
async getTopLevel(path?: string): Promise<ListResult[]> {
28+
const request = await this.s3
29+
.listObjectsV2({
30+
Bucket: this.options.bucket,
31+
Prefix: path ? `${path}/` : '',
32+
Delimiter: '/'
33+
})
34+
.promise()
35+
36+
const { CommonPrefixes, Contents } = request
37+
38+
const dirs: ListResult[] =
39+
(CommonPrefixes &&
40+
CommonPrefixes.map(p => ({
41+
name: pathModule.basename(p.Prefix || ''),
42+
path: (p.Prefix || '').slice(0, -1),
43+
isFile: false,
44+
raw: p
45+
}))) ||
46+
[]
47+
48+
const files: ListResult[] =
49+
(Contents &&
50+
Contents.filter(c => c.Key && c.Key[c.Key.length - 1] !== '/').map(c =>
51+
formatContent(c)
52+
)) ||
53+
[]
54+
55+
return dirs.concat(files)
1856
}
1957

2058
getFilesStream(path?: string): Readable {
@@ -34,17 +72,11 @@ export class AwsS3Storage extends Storage<AwsS3StorageOptions> {
3472

3573
ContinuationToken = request.NextContinuationToken
3674
const contents = request.Contents
37-
3875
return (
3976
contents &&
40-
contents.map(f => ({
41-
path: <string>f.Key,
42-
name: <string>f.Key,
43-
size: f.Size,
44-
updatedAt: f.LastModified,
45-
md5Hash: f.ETag,
46-
raw: f as object
47-
}))
77+
contents
78+
.filter(c => c.Key && c.Key[c.Key.length - 1] !== '/')
79+
.map(f => formatContent(f))
4880
)
4981
})
5082
}

packages/azure/src/AzureBlobStorage.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ export class AzureBlobStorage extends Storage<AzureBlobStorageOptions> {
4141
isFile: false,
4242
raw: b
4343
}))
44-
4544
const files: ListResult[] = blobItems.map((b: any) => ({
4645
name: pathModule.basename(b.name),
4746
path: b.name,

packages/gcp/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323
],
2424
"gitHead": "b05db75f50e3a44fd01b8c95d114f3fb5c9801c3",
2525
"dependencies": {
26-
"@google-cloud/storage": "^4.7.0",
26+
"@google-cloud/common": "^3.1.0",
27+
"@google-cloud/storage": "^5.0.0",
2728
"storage-core": "^0.6.2"
2829
},
2930
"keywords": [

packages/samples/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414
"storage-azure": "^0.6.2",
1515
"storage-core": "^0.6.2",
1616
"storage-gcp": "^0.6.2",
17-
"ts-node": "^8.9.1"
17+
"ts-node": "^8.10.1"
1818
}
1919
}

packages/samples/ts/AwsS3Storage.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,8 @@ import { getStorageManager, getStorageFactory } from 'storage-core'
5252
for await (let path of ls.getFilesStream('aws-write')) {
5353
console.log(path.name)
5454
}
55+
56+
for (let result of await ls.getTopLevel('aws-write')) {
57+
console.log(`${result.isFile} | ${result.path}`)
58+
}
5559
})()

yarn.lock

Lines changed: 131 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,21 @@
192192
retry-request "^4.0.0"
193193
teeny-request "^6.0.0"
194194

195+
"@google-cloud/common@^3.0.0", "@google-cloud/common@^3.1.0":
196+
version "3.1.0"
197+
resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-3.1.0.tgz#29b2e73db37f6ca2fa521224403137be28fd1c01"
198+
integrity sha512-/DO/IjcoH7XLaczcIHIantBDKex9pp7Horkryu1ISITHWK65vtJMYPg4x50gLtQboqcYz1LkT3ejRDxwWwAXoA==
199+
dependencies:
200+
"@google-cloud/projectify" "^2.0.0"
201+
"@google-cloud/promisify" "^2.0.0"
202+
arrify "^2.0.1"
203+
duplexify "^4.1.1"
204+
ent "^2.2.0"
205+
extend "^3.0.2"
206+
google-auth-library "^6.0.0"
207+
retry-request "^4.1.1"
208+
teeny-request "^6.0.3"
209+
195210
"@google-cloud/paginator@^2.0.0":
196211
version "2.0.3"
197212
resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-2.0.3.tgz#c7987ad05d1c3ebcef554381be80e9e8da4e4882"
@@ -200,16 +215,34 @@
200215
arrify "^2.0.0"
201216
extend "^3.0.2"
202217

218+
"@google-cloud/paginator@^3.0.0":
219+
version "3.0.0"
220+
resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-3.0.0.tgz#48aeac6fb693a120dc2c0fc4ec7c27dea9cbb64e"
221+
integrity sha512-iPdxTujlZQlMGNLHPtYoVwRu8IuLFr6y0GJwsX9hKULMgqGXrP/z0MV4ROGpRAkNE1FIfa1aDfNlwZHfF2z4bQ==
222+
dependencies:
223+
arrify "^2.0.0"
224+
extend "^3.0.2"
225+
203226
"@google-cloud/projectify@^1.0.0":
204227
version "1.0.4"
205228
resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-1.0.4.tgz#28daabebba6579ed998edcadf1a8f3be17f3b5f0"
206229
integrity sha512-ZdzQUN02eRsmTKfBj9FDL0KNDIFNjBn/d6tHQmA/+FImH5DO6ZV8E7FzxMgAUiVAUq41RFAkb25p1oHOZ8psfg==
207230

231+
"@google-cloud/projectify@^2.0.0":
232+
version "2.0.0"
233+
resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-2.0.0.tgz#0cf938ff97520c238e7279f8e3de3b04e63fff0b"
234+
integrity sha512-7wZ+m4N3Imtb5afOPfqNFyj9cKrlfVQ+t5YRxLS7tUpn8Pn/i7QuVubZRTXllaWjO4T5t/gm/r2x7oy5ajjvFQ==
235+
208236
"@google-cloud/promisify@^1.0.0":
209237
version "1.0.4"
210238
resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-1.0.4.tgz#ce86ffa94f9cfafa2e68f7b3e4a7fad194189723"
211239
integrity sha512-VccZDcOql77obTnFh0TbNED/6ZbbmHDf8UMNnzO1d5g9V0Htfm4k5cllY8P1tJsRKC3zWYGRLaViiupcgVjBoQ==
212240

241+
"@google-cloud/promisify@^2.0.0":
242+
version "2.0.0"
243+
resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-2.0.0.tgz#d69db22c18551ef8217e59430f06a59cdcd5e9db"
244+
integrity sha512-r0miGK77TPem+AV3jZtUXopz9DQzeSTvsgQkamfDzkTiurkbHHTmBJQ1YQqF9Z4XjqcNKlmA9n8EvFOptNX0sg==
245+
213246
"@google-cloud/storage@^4.7.0":
214247
version "4.7.0"
215248
resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-4.7.0.tgz#a7466086a83911c7979cc238d00a127ffb645615"
@@ -238,6 +271,34 @@
238271
through2 "^3.0.0"
239272
xdg-basedir "^4.0.0"
240273

274+
"@google-cloud/storage@^5.0.0":
275+
version "5.0.0"
276+
resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-5.0.0.tgz#a2fb3c7919570dbc49c413bddbe02023fee69954"
277+
integrity sha512-fmrXOnmoHwoUDQIXDfLE7BG/U8SUIb/c1a6m+S41KKj8gb3Ncwpci6b9aAZzryfN4OyL0BhdNBz/6SJq7TjliA==
278+
dependencies:
279+
"@google-cloud/common" "^3.0.0"
280+
"@google-cloud/paginator" "^3.0.0"
281+
"@google-cloud/promisify" "^2.0.0"
282+
arrify "^2.0.0"
283+
compressible "^2.0.12"
284+
concat-stream "^2.0.0"
285+
date-and-time "^0.13.0"
286+
duplexify "^3.5.0"
287+
extend "^3.0.2"
288+
gaxios "^3.0.0"
289+
gcs-resumable-upload "^3.0.0"
290+
hash-stream-validation "^0.2.2"
291+
mime "^2.2.0"
292+
mime-types "^2.0.8"
293+
onetime "^5.1.0"
294+
p-limit "^2.2.0"
295+
pumpify "^2.0.0"
296+
readable-stream "^3.4.0"
297+
snakeize "^0.1.0"
298+
stream-events "^1.0.1"
299+
through2 "^3.0.0"
300+
xdg-basedir "^4.0.0"
301+
241302
242303
version "3.20.0"
243304
resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.20.0.tgz#bea7edf36fc93fb72ec34cb9ba854c48d4abf309"
@@ -1316,7 +1377,7 @@ arrify@^1.0.1:
13161377
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
13171378
integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
13181379

1319-
arrify@^2.0.0:
1380+
arrify@^2.0.0, arrify@^2.0.1:
13201381
version "2.0.1"
13211382
resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
13221383
integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
@@ -1358,10 +1419,10 @@ atob@^2.1.2:
13581419
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
13591420
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
13601421

1361-
aws-sdk@^2.668.0:
1362-
version "2.668.0"
1363-
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.668.0.tgz#18b3e64a47f86c109586422596e53dc733117696"
1364-
integrity sha512-mmZJmeenNM9hRR4k+JAStBhYFym2+VCPTRWv0Vn2oqqXIaIaNVdNf9xag/WMG8b8M80R3XXfVHKmDPST0/EfHA==
1422+
aws-sdk@^2.678.0:
1423+
version "2.678.0"
1424+
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.678.0.tgz#b16230f4894d40ead50f9e23805c874f4ca62549"
1425+
integrity sha512-i8t7+1/C6maQzUYUFRQXPAsUPT0YdpNsf/oHZKmmZrsOX+epnn2jmAGIBTZgUakY8jRrZxCJka+QokUIadUVQg==
13651426
dependencies:
13661427
buffer "4.9.1"
13671428
events "1.1.1"
@@ -2583,6 +2644,14 @@ gcp-metadata@^3.4.0:
25832644
gaxios "^2.1.0"
25842645
json-bigint "^0.3.0"
25852646

2647+
gcp-metadata@^4.0.0:
2648+
version "4.1.0"
2649+
resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.1.0.tgz#8b9b5903882076948554af471c838e7ea2f564b4"
2650+
integrity sha512-r57SV28+olVsflPlKyVig3Muo/VDlcsObMtvDGOEtEJXj+DDE8bEl0coIkXh//hbkSDTvo+f5lbihZOndYXQQQ==
2651+
dependencies:
2652+
gaxios "^3.0.0"
2653+
json-bigint "^0.3.0"
2654+
25862655
gcs-resumable-upload@^2.2.4:
25872656
version "2.3.3"
25882657
resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-2.3.3.tgz#02c616ed17eff6676e789910aeab3907d412c5f8"
@@ -2595,6 +2664,18 @@ gcs-resumable-upload@^2.2.4:
25952664
pumpify "^2.0.0"
25962665
stream-events "^1.0.4"
25972666

2667+
gcs-resumable-upload@^3.0.0:
2668+
version "3.0.0"
2669+
resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-3.0.0.tgz#e325f5d1b7c6bd7bce970f6dc8f610694beab657"
2670+
integrity sha512-mRh0US1FhyCbQ+WlAnMWbKMfHiQwE83za0e0tToxz1Y+i+uBS2v9pmTemGa4lo7DH49nt20mXUtsQomf+hjuQQ==
2671+
dependencies:
2672+
abort-controller "^3.0.0"
2673+
configstore "^5.0.0"
2674+
gaxios "^3.0.0"
2675+
google-auth-library "^6.0.0"
2676+
pumpify "^2.0.0"
2677+
stream-events "^1.0.4"
2678+
25982679
genfun@^5.0.0:
25992680
version "5.0.0"
26002681
resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537"
@@ -2767,13 +2848,35 @@ google-auth-library@^5.0.0, google-auth-library@^5.5.0:
27672848
jws "^4.0.0"
27682849
lru-cache "^5.0.0"
27692850

2851+
google-auth-library@^6.0.0:
2852+
version "6.0.0"
2853+
resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-6.0.0.tgz#f92576e9e920803634c258b25f091604c1379722"
2854+
integrity sha512-uLydy1t6SHN/EvYUJrtN3GCHFrnJ0c8HJjOxXiGjoTuYHIoCUT3jVxnzmjHwVnSdkfE9Akasm2rM6qG1COTXfQ==
2855+
dependencies:
2856+
arrify "^2.0.0"
2857+
base64-js "^1.3.0"
2858+
ecdsa-sig-formatter "^1.0.11"
2859+
fast-text-encoding "^1.0.0"
2860+
gaxios "^3.0.0"
2861+
gcp-metadata "^4.0.0"
2862+
gtoken "^5.0.0"
2863+
jws "^4.0.0"
2864+
lru-cache "^5.0.0"
2865+
27702866
google-p12-pem@^2.0.0:
27712867
version "2.0.4"
27722868
resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-2.0.4.tgz#036462394e266472632a78b685f0cc3df4ef337b"
27732869
integrity sha512-S4blHBQWZRnEW44OcR7TL9WR+QCqByRvhNDZ/uuQfpxywfupikf/miba8js1jZi6ZOGv5slgSuoshCWh6EMDzg==
27742870
dependencies:
27752871
node-forge "^0.9.0"
27762872

2873+
google-p12-pem@^3.0.0:
2874+
version "3.0.1"
2875+
resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.0.1.tgz#a220c05a8d7ee9751dd133ee72ecfc855820d5ab"
2876+
integrity sha512-VlQgtozgNVVVcYTXS36eQz4PXPt9gIPqLOhHN0QiV6W6h4qSCNVKPtKC5INtJsaHHF2r7+nOIa26MJeJMTaZEQ==
2877+
dependencies:
2878+
node-forge "^0.9.0"
2879+
27772880
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2:
27782881
version "4.2.4"
27792882
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
@@ -2789,6 +2892,16 @@ gtoken@^4.1.0:
27892892
jws "^4.0.0"
27902893
mime "^2.2.0"
27912894

2895+
gtoken@^5.0.0:
2896+
version "5.0.1"
2897+
resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.0.1.tgz#b93f309d89adfe230bb0f24269b978284ba89e0f"
2898+
integrity sha512-33w4FNDkUcyIOq/TqyC+drnKdI4PdXmWp9lZzssyEQKuvu9ZFN3KttaSnDKo52U3E51oujVGop93mKxmqO8HHg==
2899+
dependencies:
2900+
gaxios "^3.0.0"
2901+
google-p12-pem "^3.0.0"
2902+
jws "^4.0.0"
2903+
mime "^2.2.0"
2904+
27922905
handlebars@^4.4.0:
27932906
version "4.7.6"
27942907
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e"
@@ -4732,7 +4845,7 @@ ret@~0.1.10:
47324845
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
47334846
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
47344847

4735-
retry-request@^4.0.0:
4848+
retry-request@^4.0.0, retry-request@^4.1.1:
47364849
version "4.1.1"
47374850
resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-4.1.1.tgz#f676d0db0de7a6f122c048626ce7ce12101d2bd8"
47384851
integrity sha512-BINDzVtLI2BDukjWmjAIRZ0oglnCAkpP2vQjM3jdLhmT62h0xnQgciPwBRDAvHqpkPT2Wo1XuUyLyn6nbGrZQQ==
@@ -5270,7 +5383,7 @@ tar@^4.4.10, tar@^4.4.12, tar@^4.4.8:
52705383
safe-buffer "^5.1.2"
52715384
yallist "^3.0.3"
52725385

5273-
teeny-request@^6.0.0:
5386+
teeny-request@^6.0.0, teeny-request@^6.0.3:
52745387
version "6.0.3"
52755388
resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-6.0.3.tgz#b617f9d5b7ba95c76a3f257f6ba2342b70228b1f"
52765389
integrity sha512-TZG/dfd2r6yeji19es1cUIwAlVD8y+/svB1kAC2Y0bjEyysrfbO8EZvJBRwIE6WkwmUoB7uvWLwTIhJbMXZ1Dw==
@@ -5415,6 +5528,17 @@ trim-off-newlines@^1.0.0:
54155528
resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
54165529
integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
54175530

5531+
ts-node@^8.10.1:
5532+
version "8.10.1"
5533+
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.1.tgz#77da0366ff8afbe733596361d2df9a60fc9c9bd3"
5534+
integrity sha512-bdNz1L4ekHiJul6SHtZWs1ujEKERJnHs4HxN7rjTyyVOFf3HaJ6sLqe6aPG62XTzAB/63pKRh5jTSWL0D7bsvw==
5535+
dependencies:
5536+
arg "^4.1.0"
5537+
diff "^4.0.1"
5538+
make-error "^1.1.1"
5539+
source-map-support "^0.5.17"
5540+
yn "3.1.1"
5541+
54185542
ts-node@^8.9.1:
54195543
version "8.9.1"
54205544
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.9.1.tgz#2f857f46c47e91dcd28a14e052482eb14cfd65a5"

0 commit comments

Comments
 (0)