fix(rpc): deep-freeze procedures in defineService, not just the map
This commit is contained in:
@@ -62,5 +62,16 @@ export function defineService<Procedures extends AnyProcedures>(def: {
|
||||
);
|
||||
}
|
||||
}
|
||||
return Object.freeze({ name: def.name, procedures: Object.freeze({ ...def.procedures }) });
|
||||
// Freeze each procedure, not just the map. AnyProcedures accepts any object
|
||||
// of ProcedureDef shape, so a hand-built def that never went through
|
||||
// procedure.build() would otherwise stay mutable and the "single source of
|
||||
// truth" guarantee would rest on every call site remembering the builder.
|
||||
const frozen: Record<string, ProcedureDef> = {};
|
||||
for (const [name, value] of Object.entries(def.procedures)) {
|
||||
frozen[name] = Object.freeze({ ...value });
|
||||
}
|
||||
return Object.freeze({
|
||||
name: def.name,
|
||||
procedures: Object.freeze(frozen) as Procedures,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user