Skip to content

Commit

Permalink
fix(client): storage upload array (#66)
Browse files Browse the repository at this point in the history
  • Loading branch information
drochetti authored Jun 2, 2024
1 parent 5f15da9 commit cd20897
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 27 deletions.
2 changes: 1 addition & 1 deletion libs/client/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@fal-ai/serverless-client",
"description": "The fal serverless JS/TS client",
"version": "0.10.0",
"version": "0.10.2",
"license": "MIT",
"repository": {
"type": "git",
Expand Down
48 changes: 22 additions & 26 deletions libs/client/src/storage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,33 +103,29 @@ export const storageImpl: StorageSupport = {
},

// eslint-disable-next-line @typescript-eslint/no-explicit-any
transformInput: async (input: Record<string, any>) => {
if (!isPlainObject(input)) {
return input;
}
const promises = Object.entries(input).map(async ([key, value]) => {
if (
value instanceof Blob ||
(typeof value === 'string' && isDataUri(value))
) {
let blob = value;
// if string is a data uri, convert to blob
if (typeof value === 'string' && isDataUri(value)) {
const response = await fetch(value);
blob = await response.blob();
}
const url = await storageImpl.upload(blob as Blob);
return [key, url];
transformInput: async (input: any) => {
if (Array.isArray(input)) {
return Promise.all(input.map((item) => storageImpl.transformInput(item)));
} else if (
input instanceof Blob ||
(typeof input === 'string' && isDataUri(input))
) {
let blob = input;
// If the string is a data URI, convert it to a blob
if (typeof input === 'string' && isDataUri(input)) {
const response = await fetch(input);
blob = await response.blob();
}
if (isPlainObject(value)) {
const url = await storageImpl.upload(blob as Blob);
return url;
} else if (isPlainObject(input)) {
const promises = Object.entries(input).map(async ([key, value]) => {
return [key, await storageImpl.transformInput(value)];
}
if (Array.isArray(value)) {
return [key, await Promise.all(value.map(storageImpl.transformInput))];
}
return [key, value] as KeyValuePair;
});
const results = await Promise.all(promises);
return Object.fromEntries(results);
});
const results = await Promise.all(promises);
return Object.fromEntries(results);
}
// Return the input as is if it's neither an object nor a file/blob/data URI
return input;
},
};

0 comments on commit cd20897

Please sign in to comment.