Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

refactor(config): drop unused safeParse wrappers and stale Zod comments in config/schema.ts

Open
#740 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
Half a day
Newbie friendliness
62/100
Issue type
Refactor
Clarity
Mostly clear
Activity status
Active
Tech stack
typescript
Domain
cli

Research direction

Start by running rg for the five unused exports (ApiKeyAuthSchema, BasicAuthSchema, AuthSchema, ServiceBlockSchema, ConfigFileSchema) in src/config/schema.ts to confirm only tests use them, then run rg -i zod src to find the stale comments in loader.ts, ajv-validate.ts, json-schema-args.ts, namespaces.ts and factory.ts. Done means the wrappers and their tests are removed with a justification, the post-checks live only in ContextSchema, rg -i zod src is empty, and npm test and npx tsc --noEmit pass. Leave the strip* helpers and additionalProperties alone, since #716 covers them.

Written by the indexing model from the issue text.

Description

Summary

src/config/schema.ts exports five ajv-backed safeParse wrappers that nothing in src/ calls. Only tests use them. Several comments across src/ also still describe validation as Zod-based, but zod has been removed from the project.

Unused exports (current main):

  • ApiKeyAuthSchema (line 306)
  • BasicAuthSchema (line 316)
  • AuthSchema (line 326)
  • ServiceBlockSchema (line 335)
  • ConfigFileSchema (line 402)

Production code uses only StructuralConfigSchema (loader.ts, completion/complete.ts, completers/context-names.ts), ContextSchema (loader.ts, config/commands.ts) and CommandPolicySchema (loader.ts, completion/complete.ts).

ConfigFileSchema also duplicates the three per-context post-checks from ContextSchema, with different wording:

  • At least one service block: ContextSchema line 382-383 vs ConfigFileSchema line 426-427 ("at least one service block required").
  • contextUrlErrors: line 385 vs line 429.
  • contextVersionErrors: line 387 vs line 431.

These were around lines 378-385 and 431-440 in an earlier revision.

Stale Zod comments:

  • src/config/loader.ts:14: "Validate active context with full Zod schemas"
  • src/lib/ajv-validate.ts:7
  • src/lib/json-schema-args.ts:9
  • src/namespaces.ts:107
  • src/factory.ts:737

Proposal

  1. Delete the five unused wrappers and their tests. Deleting ConfigFileSchema removes the duplicated post-checks, so ContextSchema becomes their single home.
  2. Update the Zod comments so they describe the current ajv/JSON Schema behaviour.

The PR must explicitly justify deleting the tests for the removed wrappers: they cover only code being removed, and the behaviour that remains is still covered through ContextSchema/StructuralConfigSchema.

Out of scope: deferred to #716 (design decision 1)

This issue does not cover replacing the strip* helpers (schema.ts ~238-298, plus the ! assertions on their results) with ValidateFunction<T> type guards, or adding additionalProperties: false. Either change would alter behaviour. Today unknown config keys are silently stripped (schema.ts:137: "no additionalProperties — we strip manually"). A type guard would pass them through, and additionalProperties: false would reject them, which would break existing configs that have extra keys. Both options also overlap with #716's raw-shape plus per-field leaf validator split, which reshapes ContextSchema, contextUrlErrors, contextVersionErrors and the strip* helpers. Decide them there.

Acceptance criteria

  • ConfigFileSchema, AuthSchema, ApiKeyAuthSchema, BasicAuthSchema and ServiceBlockSchema are removed, or any that stay have a documented reason.
  • The three per-context post-checks exist only in ContextSchema.
  • No comment in src/ refers to Zod (rg -i zod src is empty).
  • The PR justifies each deleted test.
  • No behaviour change: unknown keys are still stripped, and npm test and npx tsc --noEmit pass.

Related

  • #716 (design decision 1: the strip*/type-guard and unknown-key handling is deferred there)

authored by Pi Coding Agent (Claude Opus)

Dominant language
TypeScript
Stars
47
Forks
27
Avg merge
2d 6h
Merged PRs (30d)
52

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from elastic/cli

All issues in elastic/cli

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.