diff --git a/src/commands/db/auth.ts b/src/commands/db/auth.ts index a07260c..9f0e264 100644 --- a/src/commands/db/auth.ts +++ b/src/commands/db/auth.ts @@ -158,8 +158,8 @@ const roleSub = async ( } const auth = await reg.getAuth(); try { - if (op === "assign") auth.assignRole(targetUser, role); - else if (op === "remove") auth.removeRole(targetUser, role); + if (op === "assign") await auth.assignRole(targetUser, role); + else if (op === "remove") await auth.removeRole(targetUser, role); else throw new CommandError(EXIT.USAGE, `unknown role op: ${op}`); } catch (err) { if (err instanceof CommandError) throw err; diff --git a/src/commands/db/crud.ts b/src/commands/db/crud.ts index bd51b5f..5c8a48a 100644 --- a/src/commands/db/crud.ts +++ b/src/commands/db/crud.ts @@ -250,9 +250,11 @@ export const aggregateHandler = async ( case "$project": pipe = pipe.project(arg as Record); break; - case "$unwind": - pipe = pipe.unwind(arg as string); + case "$unwind": { + const unwindField = typeof arg === "string" && arg.startsWith("$") ? arg.slice(1) : arg; + pipe = pipe.unwind(unwindField as string); break; + } default: throw new CommandError(EXIT.USAGE, `unknown aggregation operator: ${op}`); } diff --git a/src/commands/db/meta.ts b/src/commands/db/meta.ts index e5de8f8..eee422e 100644 --- a/src/commands/db/meta.ts +++ b/src/commands/db/meta.ts @@ -26,7 +26,7 @@ export const indexHandler = async ( const sorted = flagBool(parsed.flags, "sorted"); const unique = flagBool(parsed.flags, "unique"); try { - c.createIndex(field, { sorted, unique }); + c.createIndex(field, { type: sorted ? "sorted" : "hash", unique }); } catch (err) { const msg = err instanceof Error ? err.message : String(err); if (msg.includes("Unique constraint")) { diff --git a/src/commands/vec/ops.ts b/src/commands/vec/ops.ts index 56a03ec..494da14 100644 --- a/src/commands/vec/ops.ts +++ b/src/commands/vec/ops.ts @@ -220,7 +220,7 @@ export const storeBatchOp = async ( throw new CommandError(EXIT.VALIDATION, `validation: id collision: ${check.id}`); } const rec = parsedRec as Record; - const recMeta = rec["meta"]; + const recMeta = rec["metadata"] ?? rec["meta"]; const meta = recMeta && typeof recMeta === "object" && !Array.isArray(recMeta) ? (recMeta as Record) : {}; @@ -473,7 +473,11 @@ export const importOp = async ( throw new CommandError(EXIT.VALIDATION, "validation: invalid JSON for import"); } if (!Array.isArray(parsedInput)) { - throw new CommandError(EXIT.VALIDATION, "validation: import expects an array of records"); + if (parsedInput && typeof parsedInput === "object" && Array.isArray((parsedInput as Record)["records"])) { + parsedInput = (parsedInput as Record)["records"]; + } else { + throw new CommandError(EXIT.VALIDATION, "validation: import expects an array of records"); + } } // Validate every record before handing off to upstream — surface clear // errors with the offending index instead of letting upstream throw an