fix export Bytes data type to JSON (#2409)
This commit is contained in:
committed by
Florent Vilmart
parent
452887bd05
commit
6e0a25dea0
@@ -156,6 +156,18 @@ describe('parseObjectToMongoObjectForCreate', () => {
|
|||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('bytes', (done) => {
|
||||||
|
var input = {binaryData: "aGVsbG8gd29ybGQ="};
|
||||||
|
var output = transform.mongoObjectToParseObject(null, input, {
|
||||||
|
fields: { binaryData: { type: 'Bytes' }},
|
||||||
|
});
|
||||||
|
expect(typeof output.binaryData).toEqual('object');
|
||||||
|
expect(output.binaryData).toEqual(
|
||||||
|
{__type: 'Bytes', base64: "aGVsbG8gd29ybGQ="}
|
||||||
|
);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
it('nested array', (done) => {
|
it('nested array', (done) => {
|
||||||
var input = {arr: [{_testKey: 'testValue' }]};
|
var input = {arr: [{_testKey: 'testValue' }]};
|
||||||
var output = transform.mongoObjectToParseObject(null, input, {
|
var output = transform.mongoObjectToParseObject(null, input, {
|
||||||
|
|||||||
@@ -781,6 +781,10 @@ const mongoObjectToParseObject = (className, mongoObject, schema) => {
|
|||||||
restObject[key] = GeoPointCoder.databaseToJSON(value);
|
restObject[key] = GeoPointCoder.databaseToJSON(value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (schema.fields[key] && schema.fields[key].type === 'Bytes' && BytesCoder.isValidDatabaseObject(value)) {
|
||||||
|
restObject[key] = BytesCoder.databaseToJSON(value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
restObject[key] = nestedMongoObjectToNestedParseObject(mongoObject[key]);
|
restObject[key] = nestedMongoObjectToNestedParseObject(mongoObject[key]);
|
||||||
}
|
}
|
||||||
@@ -815,15 +819,29 @@ var DateCoder = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
var BytesCoder = {
|
var BytesCoder = {
|
||||||
|
base64Pattern: new RegExp("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$"),
|
||||||
|
isBase64Value(object) {
|
||||||
|
if (typeof object !== 'string') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return this.base64Pattern.test(object);
|
||||||
|
},
|
||||||
|
|
||||||
databaseToJSON(object) {
|
databaseToJSON(object) {
|
||||||
|
let value;
|
||||||
|
if (this.isBase64Value(object)) {
|
||||||
|
value = object;
|
||||||
|
} else {
|
||||||
|
value = object.buffer.toString('base64');
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
__type: 'Bytes',
|
__type: 'Bytes',
|
||||||
base64: object.buffer.toString('base64')
|
base64: value
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
isValidDatabaseObject(object) {
|
isValidDatabaseObject(object) {
|
||||||
return (object instanceof mongodb.Binary);
|
return (object instanceof mongodb.Binary) || this.isBase64Value(object);
|
||||||
},
|
},
|
||||||
|
|
||||||
JSONToDatabase(json) {
|
JSONToDatabase(json) {
|
||||||
|
|||||||
Reference in New Issue
Block a user