@forge/bridge
5.15.2-next.0-experimental-5b726e65.16.0-next.1
out/events/serialiseBlob.js~
out/events/serialiseBlob.jsModified+11
Index: package/out/events/serialiseBlob.js
===================================================================
--- package/out/events/serialiseBlob.js
+++ package/out/events/serialiseBlob.js
@@ -1,8 +1,9 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.containsSerialisedBlobs = exports.containsBlobs = exports.deserialiseBlobsInPayload = exports.serialiseBlobsInPayload = void 0;
const blobParser_1 = require("../utils/blobParser");
+// Copied from https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore?tab=readme-ov-file#_isplainobject
const isPlainObject = (value) => {
if (typeof value !== 'object' || value === null)
return false;
if (Object.prototype.toString.call(value) !== '[object Object]')
@@ -22,40 +23,50 @@
type: blob.type
};
};
const base64WithMetadataToBlob = (metadata) => {
+ // typecasting as Blob since base64ToBlob returns Blob | null but this is only null if data is undefined which it won't be here
return (0, blobParser_1.base64ToBlob)(metadata.data, metadata.type);
};
+// Recursively converts all Blobs in an object or array to base64 with metadata
const serialiseBlobsInPayload = async (payload) => {
if (payload instanceof Blob) {
+ // Convert blob to base64 with metadata and mark it as a serialized blob
const blobData = await blobToBase64WithMetadata(payload);
return {
...blobData,
+ // Custom property used to identify serialized blob data for deserialization
__isBlobData: true
};
}
if (Array.isArray(payload)) {
+ // Recursively process array elements
return Promise.all(payload.map((item) => (0, exports.serialiseBlobsInPayload)(item)));
}
if (payload && isPlainObject(payload)) {
+ // Recursively process object properties
const entries = await Promise.all(Object.entries(payload).map(async ([key, value]) => [key, await (0, exports.serialiseBlobsInPayload)(value)]));
return Object.fromEntries(entries);
}
return payload;
};
exports.serialiseBlobsInPayload = serialiseBlobsInPayload;
+// Recursively converts all serialized blob data back to Blobs in an object or array
const deserialiseBlobsInPayload = (payload) => {
if (payload && isPlainObject(payload) && '__isBlobData' in payload) {
const typedData = payload;
+ // Convert serialized blob data back to Blob
return base64WithMetadataToBlob({
data: typedData.data,
type: typedData.type
});
}
if (Array.isArray(payload)) {
+ // Recursively process array elements
return payload.map((item) => (0, exports.deserialiseBlobsInPayload)(item));
}
if (payload && isPlainObject(payload)) {
+ // Recursively process object properties
const result = {};
for (const [key, value] of Object.entries(payload)) {
result[key] = (0, exports.deserialiseBlobsInPayload)(value);
}