fix: read template variables as own properties only
Addresses Copilot's round-6 review on #2035. `toString`, `constructor`, `valueOf` and `__proto__` are all valid RFC 6570 variable names -- `varname` allows ALPHA / DIGIT / `_` / pct-encoded -- and every lookup here was a bare `values[name]`, which finds `Object.prototype`'s member for each of them. Measured: `({})["toString"] !== undefined` is true with typeof "function", and `({}["constructor"] ?? "").length` is 1. So a *blank* `{?toString}` field read as supplied and expanded a function body into the URI instead of omitting the expression, and `hasRequiredValues([["constructor"]], {})` returned true because `Object.length` is 1 -- a required group satisfied by nothing. All reads now go through an own-property `readValue`, and the web preview's filled-check uses `Object.hasOwn`. `expandExpression` carries the value through its filter rather than re-reading it afterwards, so the "is it defined" test and the read cannot disagree and nothing needs a non-null assertion. The remaining six findings were documentation drifting behind the code, which matters here because the comments are the argument for why this module exists: - The web helper still described the SDK's second-`?`-to-`&` rewrite as something the preview relies on. That was removed last round. - Three places still named the CLI as a consumer. It has no template form and passes an already-expanded `--uri` to `readResource`. - The PR description still described the superseded architecture (expansion delegated to the SDK), i.e. the opposite of what now ships. Signed-off-by: cliffhall <cliff@futurescale.com>
This commit is contained in:
parent
ebc18e1d56
commit
1939136eff
1 changed files with 102 additions and 23 deletions
|
|
@ -36,7 +36,7 @@ inspector/
|
|||
│ │ # schema collapse shared by the web and TUI form builders
|
||||
│ ├── logging/ # Silent pino logger singleton
|
||||
│ ├── mcp/ # InspectorClient runtime, state stores, transports, config import,
|
||||
│ │ # and the RFC 6570 URI-template helpers all three clients expand through
|
||||
│ │ # and the RFC 6570 URI-template helpers the web form and TUI expand through
|
||||
│ ├── node/ # Node-only shared helpers: version reader, hostUrl (host normalize/canonicalize + all-interfaces/loopback detection)
|
||||
│ ├── react/ # React hooks over the state stores
|
||||
│ └── storage/ # File I/O helpers for the OAuth persist backends
|
||||
|
|
|
|||
Loading…
Reference in a new issue