switch from xml2js to fast-xml-parser

much smaller and much faster
This commit is contained in:
Peter Cai 2020-02-17 15:33:32 +08:00
parent 768d10bb75
commit f1058684ed
No known key found for this signature in database
GPG Key ID: 71F5FB4E4F3FD54F
4 changed files with 15 additions and 29 deletions

28
package-lock.json generated
View File

@ -1175,6 +1175,12 @@
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
},
"fast-xml-parser": {
"version": "3.16.0",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.16.0.tgz",
"integrity": "sha512-U+bpScacfgnfNfIKlWHDu4u6rtOaCyxhblOLJ8sZPkhsjgGqdZmVPBhdOyvdMGCDt8CsAv+cssOP3NzQptNt2w==",
"dev": true
},
"figgy-pudding": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
@ -2884,12 +2890,6 @@
"ret": "~0.1.10"
}
},
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
"dev": true
},
"schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
@ -3549,22 +3549,6 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
},
"xml2js": {
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
"integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
"dev": true,
"requires": {
"sax": ">=0.6.0",
"xmlbuilder": "~11.0.0"
}
},
"xmlbuilder": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
"dev": true
},
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",

View File

@ -13,8 +13,8 @@
"devDependencies": {
"coffee-loader": "^0.9.0",
"coffeescript": "^2.5.1",
"fast-xml-parser": "^3.16.0",
"json-loader": "^0.5.7",
"webpack": "^4.41.6",
"xml2js": "^0.4.23"
"webpack": "^4.41.6"
}
}

View File

@ -1,5 +1,5 @@
import AwsAuth from "./auth"
import { parseStringPromise as parseXML } from "xml2js"
import parser from "fast-xml-parser"
class S3
constructor: (@conf) ->
@ -50,10 +50,12 @@ class S3
if not resp.ok
# no error handling yet
throw txt
result = await parseXML txt
result = parser.parse txt,
arrayMode: true
console.log result
if not result.ListBucketResult
return null
result.ListBucketResult
result.ListBucketResult[0]
# params are in CamelCase, but converted to x-amz-* headers automatically
# Content* headers are exempt from the x-amz-* prefix, as well as Expires

View File

@ -65,11 +65,11 @@ handleGET = (req, file) ->
# We still need the real file name
files = await s3.listObjects
prefix: path
if !files.Contents or files.Contents.length == 0
if not files.Contents or files.Contents.length == 0
return new Response "Not Found",
status: 404
# The full path to the original file
fullPath = files.Contents[0].Key[0]
fullPath = files.Contents[0].Key
fileName = fullPath.split('/')[-1]
# Build options and downlaod the file from origin