# Changelog ## 0.4.0 feature: the tfvars store keeps Terraform modules, their instances and the instances' variable files in PostgreSQL. - `createTfvarsStore(pool)`: the tables `tf_modules`, `tf_instances` and `tf_variable_files`, created at the first use, with `modules` (`list`, `put`, `delete`), `instances` (`list`, `create`, `delete`) and `variables(module, instance)` (`read`, `write`, `remove`), whose writes take the version read and answer `false` when the files changed since. - `versionOf`, `tfvarsText`, and the types `TfModule`, `TfInstance` and `TfvarsFileStatus` with the patterns of their names, also exported from `/web`. - `pg` is an optional peer dependency, for the store. - `npm test` tests the store against a scratch database of the server the `PG*` variables name. ## 0.3.0 feature: the key of a credential store may be a path of keys, so stores of several kinds share one object of config.json. - `CredentialStore.key` is a key of `config.json` or a path of keys separated by dots, such as `connections.pg`; read, validate, write and `credentialValues` use the list at that path, and a write creates the objects of the path that are missing and keeps their other keys. ## 0.2.1 fix: a credential store holds credentials of one kind, without a kind field in its entries, and the dialog edits several stores in tabs. - A `CredentialStore` has one `kind`, and its entries hold the name and the fields of that kind only; `kind` is no longer a field of an entry, of `CredentialProfile`, or of `CredentialKind`. The read answer has the store's `kind` in place of `kinds`. - `CredentialsButton` takes `stores`, the prefixes and labels of the stores of the same `config.json`, with a tab for each when there are several; Save writes each store that changed. The message of an empty store is centered in the dialog, and the kind's label keeps its case. - The README's Using it shows the `dev-link` script of the applications, `npm link --no-save` in both their packages, in place of the two commands. ## 0.2.0 feature: the credential store keeps credentials of any kind in config.json with encrypted secrets, with its routes and its dialog. - `encryptionKey`, `encrypt` and `decrypt`: AES-256-GCM with the SHA-256 of `ENCRYPTION_KEY` or of the content of `ENCRYPTION_KEY_FILE`. - `CredentialStore`, `credentialProblems`, `credentialValues` and `registerCredentialRoutes`: a list of credentials in a key of `config.json`, of the kinds the application gives, with routes to read, validate and write it; secrets are encrypted and never answered. - `POSTGRESQL_KIND`, the kind of a PostgreSQL connection. - `CredentialsButton`, the dialog that edits a store, its fields rendered from the kinds. ## 0.1.1 fix: the declarations of the published package import the other declarations by their .js names. - The `.d.ts` files of the package name the files they import as `.js`, as the compiled JavaScript does, instead of the `.ts` and `.tsx` files of the source, which the package does not hold. ## 0.1.0 feature: sk-react-toolkit holds the server helpers, web components and Vite font plugin shared by manage-ui and sql-query-webui. - `sk-react-toolkit/server`: `HttpError`, `strict`, the error and not-found handlers, the log, `fail`, `gitVersion`, `exitOnSignals` and `readJsonObject`. - `sk-react-toolkit/web`: `request` and `ApiError`, the theme and `renderApp`, the font styles, `Card`, `ThemeMenu`, `SwitcherMenu`, `TextInput`, `RowDialog`, `useValidation` and `createBrowserSettings`. - `sk-react-toolkit/vite`: the `VITE_FONT` font plugin and the resolve options that keep one copy of React, MUI and Emotion. - `npm run build` builds the published package, `@koszewscy/sk-react-toolkit`, compiled to JavaScript with declarations, in `dist/`. The `Release` workflow of Gitea Actions checks, builds and publishes each tag to the Gitea npm registry, skipping a version already published.