Skip to content

Commit ad540fb

Browse files
authored
VS-46 Throw detailed errors properly (#1219)
1 parent bdb7eb7 commit ad540fb

File tree

3 files changed

+53
-7
lines changed

3 files changed

+53
-7
lines changed

src/cloudflare/internal/test/vectorize/vectorize-api-test.js

+32
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,38 @@ export const test_vector_search_vector_insert = {
120120
},
121121
};
122122

123+
export const test_vector_search_vector_insert_error = {
124+
/**
125+
* @param {unknown} ctr
126+
* @param {Env} env
127+
*/
128+
async test(ctr, env) {
129+
const IDX = env["vector-search"];
130+
{
131+
/** @type {Array<VectorizeVector>} */
132+
const newVectors = [
133+
{
134+
id: "fail-with-test-error",
135+
values: new Float32Array(),
136+
},
137+
];
138+
139+
/** @type {Error | null} */
140+
let error = null;
141+
try {
142+
await IDX.insert(newVectors);
143+
} catch (e) {
144+
error = e;
145+
}
146+
147+
assert.equal(
148+
error && error.message,
149+
"VECTOR_INSERT_ERROR (code = 9999): You asked me for this error"
150+
);
151+
}
152+
},
153+
}
154+
123155
export const test_vector_search_vector_upsert = {
124156
/**
125157
* @param {unknown} ctr

src/cloudflare/internal/test/vectorize/vectorize-mock.js

+9
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,15 @@ export default {
121121
} else if (request.method === "POST" && pathname.endsWith("/insert")) {
122122
/** @type {{vectors: Array<VectorizeVector>}} */
123123
const data = await request.json();
124+
if (data.vectors.find((v) => v.id == 'fail-with-test-error')) {
125+
return Response.json({
126+
code: 9999,
127+
error: 'You asked me for this error',
128+
}, {
129+
status: 400
130+
});
131+
};
132+
124133
return Response.json({
125134
ids: [
126135
...data.vectors.map(({ id }) => id),

src/cloudflare/internal/vectorize-api.ts

+12-7
Original file line numberDiff line numberDiff line change
@@ -160,17 +160,22 @@ class VectorizeIndexImpl implements VectorizeIndex {
160160
init
161161
);
162162
if (res.status !== 200) {
163+
let err: Error | null = null;
164+
163165
try {
164-
const err = (await res.json()) as VectorizeError;
165-
throw new Error(
166-
`${Operation[operation]}_ERROR ${
167-
typeof err.code === "number" ? ` (code = ${err.code})` : ""
168-
}: ${err.error}`,
166+
const errResponse = (await res.json()) as VectorizeError;
167+
err = new Error(
168+
`${Operation[operation]}_ERROR ${typeof errResponse.code === "number" ? `(code = ${errResponse.code})` : ""
169+
}: ${errResponse.error}`,
169170
{
170-
cause: new Error(err.error),
171+
cause: new Error(errResponse.error),
171172
}
172173
);
173-
} catch (e) {
174+
} catch (e) { }
175+
176+
if (err) {
177+
throw err;
178+
} else {
174179
throw new Error(
175180
`${Operation[operation]}_ERROR: Status + ${res.status}`,
176181
{

0 commit comments

Comments
 (0)