Skip to content

Commit

Permalink
feat: Replace xml2js to fast-xml-parse (#283)
Browse files Browse the repository at this point in the history
  • Loading branch information
rrr523 authored Aug 29, 2023
1 parent d155b2b commit 1badb9c
Show file tree
Hide file tree
Showing 12 changed files with 147 additions and 101 deletions.
5 changes: 5 additions & 0 deletions .changeset/giant-toys-march.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@bnb-chain/greenfield-js-sdk': patch
---

feat: Replace xml2js for universal usage browser and nodejs
4 changes: 2 additions & 2 deletions packages/chain-sdk/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,13 @@
"dayjs": "^1.11.7",
"dotenv": "^16.0.3",
"ethereum-cryptography": "^2.0.0",
"fast-xml-parser": "^4.2.7",
"lodash.clonedeep": "^4.5.0",
"lodash.mapvalues": "^4.6.0",
"lodash.sortby": "^4.7.0",
"long": "^5.2.1",
"reflect-metadata": "^0.1.13",
"tsyringe": "^4.7.0",
"xml2js": "^0.6.2"
"tsyringe": "^4.7.0"
},
"devDependencies": {
"@jest/globals": "^29.5.0",
Expand Down
12 changes: 5 additions & 7 deletions packages/chain-sdk/src/clients/spclient/spApis/getBucketMeta.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
import { GetBucketMetaResponse } from '@/types';
import xml from 'xml2js';
import { XMLParser } from 'fast-xml-parser';

// https://docs.bnbchain.org/greenfield-docs/docs/api/storgae-provider-rest/get_bucket_meta
export const parseGetBucketMetaResponse = async (data: string) => {
// Buckets
const res = (await xml.parseStringPromise(data, {
strict: true,
explicitRoot: true,
explicitArray: false,
})) as GetBucketMetaResponse;
const xmlParser = new XMLParser({
parseTagValue: false,
});
const res = xmlParser.parse(data) as GetBucketMetaResponse;

return res;
};
11 changes: 5 additions & 6 deletions packages/chain-sdk/src/clients/spclient/spApis/getNonce.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { IFetchNonce, RequestNonceResponse } from '@/types';
import { fetchWithTimeout } from '@/utils/http';
import xml from 'xml2js';
import { XMLParser } from 'fast-xml-parser';
import { Headers } from 'cross-fetch';

// https://docs.bnbchain.org/greenfield-docs/docs/api/storgae-provider-rest/get_nonce
Expand All @@ -22,11 +22,10 @@ export const getNonce = async ({ spEndpoint, spName, spAddress, address, domain

const data = await result.text();

res = (await xml.parseStringPromise(data, {
strict: true,
explicitRoot: true,
explicitArray: false,
})) as RequestNonceResponse;
const xmlParser = new XMLParser({
parseTagValue: false,
});
res = xmlParser.parse(data) as RequestNonceResponse;
} catch (error) {
return { code: -1, nonce: null };
}
Expand Down
11 changes: 5 additions & 6 deletions packages/chain-sdk/src/clients/spclient/spApis/getObjectMeta.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import { convertStrToBool, formatObjectInfo } from '@/types/sp-xml/Common';
import { GetObjectMetaResponse } from '@/types/sp-xml/GetObjectMetaResponse';
import xml from 'xml2js';
import { XMLParser } from 'fast-xml-parser';

// https://docs.bnbchain.org/greenfield-docs/docs/api/storgae-provider-rest/get_object_meta
export const parseGetObjectMetaResponse = async (data: string) => {
const res = (await xml.parseStringPromise(data, {
strict: true,
explicitRoot: true,
explicitArray: false,
})) as GetObjectMetaResponse;
const xmlParser = new XMLParser({
parseTagValue: false,
});
const res = xmlParser.parse(data) as GetObjectMetaResponse;

const Object = res.GfSpGetObjectMetaResponse.Object || {};
if (Object) {
Expand Down
11 changes: 5 additions & 6 deletions packages/chain-sdk/src/clients/spclient/spApis/getUserBuckets.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import { GetUserBucketsResponse } from '@/types';
import { convertStrToBool } from '@/types/sp-xml/Common';
import xml from 'xml2js';
import { XMLParser } from 'fast-xml-parser';

// https://docs.bnbchain.org/greenfield-docs/docs/api/storgae-provider-rest/get_user_buckets
export const parseGetUserBucketsResponse = async (data: string) => {
const res = (await xml.parseStringPromise(data, {
strict: true,
explicitRoot: true,
explicitArray: false,
})) as GetUserBucketsResponse;
const xmlParser = new XMLParser({
parseTagValue: false,
});
const res = xmlParser.parse(data) as GetUserBucketsResponse;

let Buckets = res.GfSpGetUserBucketsResponse.Buckets || [];
if (Buckets) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import { convertStrToBool, formatObjectInfo } from '@/types/sp-xml/Common';
import { ListObjectsByBucketNameResponse } from '@/types/sp-xml/ListObjectsByBucketNameResponse';
import xml from 'xml2js';
import { XMLParser } from 'fast-xml-parser';

// https://docs.bnbchain.org/greenfield-docs/docs/api/storgae-provider-rest/list_objects_by_bucket
export const parseListObjectsByBucketNameResponse = async (data: string) => {
const res = (await xml.parseStringPromise(data, {
strict: true,
explicitRoot: true,
explicitArray: false,
})) as ListObjectsByBucketNameResponse;
const xmlParser = new XMLParser({
parseTagValue: false,
});
const res = xmlParser.parse(data) as ListObjectsByBucketNameResponse;

let Objects = res.GfSpListObjectsByBucketNameResponse.Objects || [];
if (Objects) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { EMPTY_STRING_SHA256, METHOD_GET } from '@/constants';
import { ICreateBucketMsgType, IMigrateBucketMsgType, ReqMeta } from '@/types';
import { IMigrateBucketMsgType, ReqMeta } from '@/types';
import { toHex, utf8ToBytes } from 'ethereum-cryptography/utils';

// https://docs.bnbchain.org/greenfield-docs/docs/api/storgae-provider-rest/get_approval
Expand Down
11 changes: 5 additions & 6 deletions packages/chain-sdk/src/clients/spclient/spApis/parseError.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import { RequestErrorResponse } from '@/types';
import xml from 'xml2js';
import { XMLParser } from 'fast-xml-parser';

export const parseError = async (data: string) => {
const res = (await xml.parseStringPromise(data, {
strict: true,
explicitRoot: true,
explicitArray: false,
})) as RequestErrorResponse;
const xmlParser = new XMLParser({
parseTagValue: false,
});
const res = xmlParser.parse(data) as RequestErrorResponse;

return {
code: res.Error.Code,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { EMPTY_STRING_SHA256, METHOD_GET } from '@/constants';
import { ReqMeta, TBaseGetBucketReadQuota } from '@/types';
import { ReadQuotaResponse } from '@/types/sp-xml';
import { generateUrlByBucketName } from '@/utils/s3';
import xml from 'xml2js';
import { XMLParser } from 'fast-xml-parser';

// https://docs.bnbchain.org/greenfield-docs/docs/api/storgae-provider-rest/query_bucket_read_quota
export const getQueryBucketReadQuotaMetaInfo = async (
Expand Down Expand Up @@ -42,11 +42,10 @@ export const getQueryBucketReadQuotaMetaInfo = async (
};

export const parseReadQuotaResponse = async (data: string) => {
const res = (await xml.parseStringPromise(data, {
strict: true,
explicitRoot: true,
explicitArray: false,
})) as ReadQuotaResponse;
const xmlParser = new XMLParser({
parseTagValue: false,
});
const res = xmlParser.parse(data) as ReadQuotaResponse;

return res;
};
4 changes: 2 additions & 2 deletions packages/chain-sdk/src/tests/parsexml.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ describe('parseListObjectsByBucketNameResponse', () => {
<ObjectInfo>
<Owner>0x1C893441AB6c1A75E01887087ea508bE8e07AAae</Owner>
<Creator>0x1C893441AB6c1A75E01887087ea508bE8e07AAae</Creator>
<BucketName>foo</BucketName>
<BucketName>true</BucketName>
<ObjectName>obk</ObjectName>
<Id>739112</Id>
<LocalVirtualGroupId>1</LocalVirtualGroupId>
Expand Down Expand Up @@ -136,7 +136,7 @@ describe('parseListObjectsByBucketNameResponse', () => {
ObjectInfo: {
Owner: '0x1C893441AB6c1A75E01887087ea508bE8e07AAae',
Creator: '0x1C893441AB6c1A75E01887087ea508bE8e07AAae',
BucketName: 'foo',
BucketName: 'true',
ObjectName: 'obk',
Id: 739112,
LocalVirtualGroupId: 1,
Expand Down
Loading

0 comments on commit 1badb9c

Please sign in to comment.