Repository navigation
feat: add a configuration editor for JSON settings files - #3
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by mau
Before: a tool that wanted people to change its settings after setup had to send them to a text editor, with no validation and no protection against a half-written file.
After:
editConfig('./service.json', fields)shows every setting as a row (current value,(default),not set, or(invalid)for a stored value that no longer fits), edits one at a time with the same prompts and validation as a setup flow, marks unsaved changes, and writes the file only ons.qasks before discarding changes.npm run demo -- configshows it on an in-memory sample.Targets
main. Until #4 merges, the diff also shows the wizard and prompt fix from #4; merge #4 first and this PR shows only the configuration editor.How: fields use dotted names (
server.port) read and written throughgetValue/setValue/unsetValue, which reject__proto__-style keys. Keys no field describes are preserved.diffValuesreports{name, before, after}per changed field.saveConfigwrites two-space JSON to a temp file beside the target and renames it into place, keeping the replaced file's permissions unlessmodeis given (e.g.0o600for secrets).loadConfigtreats a missing or empty file as{}and refuses non-object JSON instead of overwriting it. Guide indocs/config-editor.md.