
































@@ -261,13 +261,21 @@ function isUnwrappable(object: unknown): object is ZodDummy {
261261);
262262}
263263264-/** Walk a Zod schema and mark hints for fields registered with the sensitive schema marker. */
264+/**
265+ * Traverses the Zod schema tree and returns a copy of `hints` with every
266+ * sensitive path marked.
267+ */
265268export function mapSensitivePaths(
266269schema: z.ZodType,
267270path: string,
268271hints: ConfigUiHints,
269272): ConfigUiHints {
270-let next = { ...hints };
273+const next = { ...hints };
274+mapSensitivePathsMut(schema, path, next);
275+return next;
276+}
277+278+function mapSensitivePathsMut(schema: z.ZodType, path: string, hints: ConfigUiHints): void {
271279let currentSchema = schema;
272280let isSensitive = sensitive.has(currentSchema);
273281@@ -277,41 +285,39 @@ export function mapSensitivePaths(
277285}
278286279287if (isSensitive) {
280-next[path] = { ...next[path], sensitive: true };
281-} else if (isSensitiveConfigPath(path) && !next[path]?.sensitive) {
288+hints[path] = { ...hints[path], sensitive: true };
289+} else if (isSensitiveConfigPath(path) && !hints[path]?.sensitive) {
282290getLog().debug(`possibly sensitive key found: (${path})`);
283291}
284292285293if (currentSchema instanceof z.ZodObject) {
286294const shape = currentSchema.shape;
287295for (const key in shape) {
288296const nextPath = path ? `${path}.${key}` : key;
289-next = mapSensitivePaths(shape[key], nextPath, next);
297+mapSensitivePathsMut(shape[key], nextPath, hints);
290298}
291299const catchallSchema = currentSchema["_def"].catchall as z.ZodType | undefined;
292300if (catchallSchema && !(catchallSchema instanceof z.ZodNever)) {
293301const nextPath = path ? `${path}.*` : "*";
294-next = mapSensitivePaths(catchallSchema, nextPath, next);
302+mapSensitivePathsMut(catchallSchema, nextPath, hints);
295303}
296304} else if (currentSchema instanceof z.ZodArray) {
297305const nextPath = path ? `${path}[]` : "[]";
298-next = mapSensitivePaths(currentSchema.element as z.ZodType, nextPath, next);
306+mapSensitivePathsMut(currentSchema.element as z.ZodType, nextPath, hints);
299307} else if (currentSchema instanceof z.ZodRecord) {
300308const nextPath = path ? `${path}.*` : "*";
301-next = mapSensitivePaths(currentSchema["_def"].valueType as z.ZodType, nextPath, next);
309+mapSensitivePathsMut(currentSchema["_def"].valueType as z.ZodType, nextPath, hints);
302310} else if (
303311currentSchema instanceof z.ZodUnion ||
304312currentSchema instanceof z.ZodDiscriminatedUnion
305313) {
306314for (const option of currentSchema.options) {
307-next = mapSensitivePaths(option as z.ZodType, path, next);
315+mapSensitivePathsMut(option as z.ZodType, path, hints);
308316}
309317} else if (currentSchema instanceof z.ZodIntersection) {
310-next = mapSensitivePaths(currentSchema["_def"].left as z.ZodType, path, next);
311-next = mapSensitivePaths(currentSchema["_def"].right as z.ZodType, path, next);
318+mapSensitivePathsMut(currentSchema["_def"].left as z.ZodType, path, hints);
319+mapSensitivePathsMut(currentSchema["_def"].right as z.ZodType, path, hints);
312320}
313-314-return next;
315321}
316322317323/** @internal */
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。