From f1058684edd647ecc95d3055af84da4bc2ff1fe4 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 17 Feb 2020 15:33:32 +0800 Subject: [PATCH] switch from xml2js to fast-xml-parser much smaller and much faster --- package-lock.json | 28 ++++++---------------------- package.json | 4 ++-- src/aws/s3.coffee | 8 +++++--- src/index.coffee | 4 ++-- 4 files changed, 15 insertions(+), 29 deletions(-) diff --git a/package-lock.json b/package-lock.json index 514075c..94ad238 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index 192b8ff..9b74d09 100644 --- a/package.json +++ b/package.json @@ -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" } } diff --git a/src/aws/s3.coffee b/src/aws/s3.coffee index 99b7b10..e4e1443 100644 --- a/src/aws/s3.coffee +++ b/src/aws/s3.coffee @@ -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 diff --git a/src/index.coffee b/src/index.coffee index 7954a65..e25e585 100644 --- a/src/index.coffee +++ b/src/index.coffee @@ -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