zod-envkit 1.3.4 → 1.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/{chunk-J4V5ODI6.js → chunk-WWWQDMV5.js} +1 -1
- package/dist/cli/index.cjs +11 -5
- package/dist/cli/index.js +11 -5
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [1.3.5](https://github.com/nxtxe/zod-envkit/compare/v1.3.4...v1.3.5) (2026-05-04)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **cli:** harden 1.3.5 stability checks and release hygiene ([74381b9](https://github.com/nxtxe/zod-envkit/commit/74381b97785a469bf5465d8839702f206acb4c2e))
|
|
7
|
+
|
|
1
8
|
## [1.3.4](https://github.com/nxtxe/zod-envkit/compare/v1.3.3...v1.3.4) (2026-04-20)
|
|
2
9
|
|
|
3
10
|
|
|
@@ -196,7 +196,7 @@ var SECRET_PATTERNS = [
|
|
|
196
196
|
(k) => k.includes("SESSION"),
|
|
197
197
|
(k) => k.includes("CREDENTIAL"),
|
|
198
198
|
(k) => k.includes("CREDS"),
|
|
199
|
-
(k) => k.includes("DATABASE_URL") || k === "DB_URL",
|
|
199
|
+
(k) => k.includes("DATABASE_URL") || k === "DB_URL" || k === "POSTGRES_URL" || k === "MYSQL_URL" || k === "DATABASE",
|
|
200
200
|
(k) => k.includes("CONNECTION_STRING")
|
|
201
201
|
];
|
|
202
202
|
function isSecretKey(key) {
|
package/dist/cli/index.cjs
CHANGED
|
@@ -46,7 +46,10 @@ var messages = {
|
|
|
46
46
|
INVALID_FORMAT: "Invalid docs format",
|
|
47
47
|
INVALID_MASK_MODE: "Invalid mask mode",
|
|
48
48
|
INVALID_SORT: "Invalid sort mode",
|
|
49
|
+
INVALID_SCHEMA_MODE: "Invalid schema mode",
|
|
49
50
|
INIT_INPUT_EMPTY: "Input env file is empty or not found:",
|
|
51
|
+
META_EMPTY_TIP_LINE_1: "Add at least one KEY=value line to .env.example,",
|
|
52
|
+
META_EMPTY_TIP_LINE_2: "or create env.meta.json and run: npx zod-envkit generate -c env.meta.json",
|
|
50
53
|
SCHEMA_LOAD_FAILED: "Failed to load schema file:",
|
|
51
54
|
SCHEMA_NOT_OBJECT: "Schema file must export a Zod object (z.object(...)).",
|
|
52
55
|
SCHEMA_VARS_NOT_IN_META: "Schema variables not listed in env.meta.json:",
|
|
@@ -70,7 +73,10 @@ var messages = {
|
|
|
70
73
|
INVALID_FORMAT: "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u0438",
|
|
71
74
|
INVALID_MASK_MODE: "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C \u043C\u0430\u0441\u043A\u0438\u0440\u043E\u0432\u043A\u0438",
|
|
72
75
|
INVALID_SORT: "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438",
|
|
76
|
+
INVALID_SCHEMA_MODE: "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C schema",
|
|
73
77
|
INIT_INPUT_EMPTY: "\u0424\u0430\u0439\u043B \u043E\u043A\u0440\u0443\u0436\u0435\u043D\u0438\u044F \u043F\u0443\u0441\u0442 \u0438\u043B\u0438 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D:",
|
|
78
|
+
META_EMPTY_TIP_LINE_1: "\u0414\u043E\u0431\u0430\u0432\u044C\u0442\u0435 \u0432 .env.example \u0445\u043E\u0442\u044F \u0431\u044B \u043E\u0434\u043D\u0443 \u0441\u0442\u0440\u043E\u043A\u0443 KEY=value,",
|
|
79
|
+
META_EMPTY_TIP_LINE_2: "\u0438\u043B\u0438 \u0441\u043E\u0437\u0434\u0430\u0439\u0442\u0435 env.meta.json \u0438 \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u0435: npx zod-envkit generate -c env.meta.json",
|
|
74
80
|
SCHEMA_LOAD_FAILED: "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0444\u0430\u0439\u043B \u0441\u0445\u0435\u043C\u044B:",
|
|
75
81
|
SCHEMA_NOT_OBJECT: "\u0424\u0430\u0439\u043B \u0441\u0445\u0435\u043C\u044B \u0434\u043E\u043B\u0436\u0435\u043D \u044D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C Zod object (z.object(...)).",
|
|
76
82
|
SCHEMA_VARS_NOT_IN_META: "\u041F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0435 \u0441\u0445\u0435\u043C\u044B \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442 \u0432 env.meta.json:",
|
|
@@ -183,8 +189,8 @@ function loadMeta(lang, configFile) {
|
|
|
183
189
|
`- ${examplePath}`,
|
|
184
190
|
"",
|
|
185
191
|
t(lang, "META_TIP"),
|
|
186
|
-
|
|
187
|
-
|
|
192
|
+
` ${t(lang, "META_EMPTY_TIP_LINE_1")}`,
|
|
193
|
+
` ${t(lang, "META_EMPTY_TIP_LINE_2")}`
|
|
188
194
|
]);
|
|
189
195
|
}
|
|
190
196
|
console.warn(`\u26A0\uFE0F ${t(lang, "META_FALLBACK_EXAMPLE")}`);
|
|
@@ -470,7 +476,7 @@ var SECRET_PATTERNS = [
|
|
|
470
476
|
(k) => k.includes("SESSION"),
|
|
471
477
|
(k) => k.includes("CREDENTIAL"),
|
|
472
478
|
(k) => k.includes("CREDS"),
|
|
473
|
-
(k) => k.includes("DATABASE_URL") || k === "DB_URL",
|
|
479
|
+
(k) => k.includes("DATABASE_URL") || k === "DB_URL" || k === "POSTGRES_URL" || k === "MYSQL_URL" || k === "DATABASE",
|
|
474
480
|
(k) => k.includes("CONNECTION_STRING")
|
|
475
481
|
];
|
|
476
482
|
function isSecretKey(key) {
|
|
@@ -661,7 +667,7 @@ function registerCheck(program2, getLang2) {
|
|
|
661
667
|
if (opts.schema) {
|
|
662
668
|
const schemaMode = String(opts.schemaMode ?? "strict").toLowerCase();
|
|
663
669
|
if (schemaMode !== "warn" && schemaMode !== "strict") {
|
|
664
|
-
fail(lang, "
|
|
670
|
+
fail(lang, "INVALID_SCHEMA_MODE", ["- warn | strict"]);
|
|
665
671
|
}
|
|
666
672
|
const { keys: schemaKeys } = await loadSchemaFile(opts.schema, lang);
|
|
667
673
|
const metaKeys = new Set(Object.keys(meta));
|
|
@@ -672,7 +678,7 @@ function registerCheck(program2, getLang2) {
|
|
|
672
678
|
const lines = [];
|
|
673
679
|
if (inSchemaNotMeta.length) {
|
|
674
680
|
lines.push(`\u274C ${t(lang, "SCHEMA_VARS_NOT_IN_META")}`);
|
|
675
|
-
inSchemaNotMeta.forEach((k) => lines.push(`- ${k}`));
|
|
681
|
+
inSchemaNotMeta.sort((a, b) => a.localeCompare(b)).forEach((k) => lines.push(`- ${k}`));
|
|
676
682
|
lines.push(` ${t(lang, "SCHEMA_HINT_ADD_TO_META")}`);
|
|
677
683
|
lines.push("");
|
|
678
684
|
}
|
package/dist/cli/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
getMissingEnv,
|
|
6
6
|
getUnknownEnv,
|
|
7
7
|
isSecretKey
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-WWWQDMV5.js";
|
|
9
9
|
|
|
10
10
|
// src/cli/index.ts
|
|
11
11
|
import { Command } from "commander";
|
|
@@ -30,7 +30,10 @@ var messages = {
|
|
|
30
30
|
INVALID_FORMAT: "Invalid docs format",
|
|
31
31
|
INVALID_MASK_MODE: "Invalid mask mode",
|
|
32
32
|
INVALID_SORT: "Invalid sort mode",
|
|
33
|
+
INVALID_SCHEMA_MODE: "Invalid schema mode",
|
|
33
34
|
INIT_INPUT_EMPTY: "Input env file is empty or not found:",
|
|
35
|
+
META_EMPTY_TIP_LINE_1: "Add at least one KEY=value line to .env.example,",
|
|
36
|
+
META_EMPTY_TIP_LINE_2: "or create env.meta.json and run: npx zod-envkit generate -c env.meta.json",
|
|
34
37
|
SCHEMA_LOAD_FAILED: "Failed to load schema file:",
|
|
35
38
|
SCHEMA_NOT_OBJECT: "Schema file must export a Zod object (z.object(...)).",
|
|
36
39
|
SCHEMA_VARS_NOT_IN_META: "Schema variables not listed in env.meta.json:",
|
|
@@ -54,7 +57,10 @@ var messages = {
|
|
|
54
57
|
INVALID_FORMAT: "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u0438",
|
|
55
58
|
INVALID_MASK_MODE: "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C \u043C\u0430\u0441\u043A\u0438\u0440\u043E\u0432\u043A\u0438",
|
|
56
59
|
INVALID_SORT: "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438",
|
|
60
|
+
INVALID_SCHEMA_MODE: "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C schema",
|
|
57
61
|
INIT_INPUT_EMPTY: "\u0424\u0430\u0439\u043B \u043E\u043A\u0440\u0443\u0436\u0435\u043D\u0438\u044F \u043F\u0443\u0441\u0442 \u0438\u043B\u0438 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D:",
|
|
62
|
+
META_EMPTY_TIP_LINE_1: "\u0414\u043E\u0431\u0430\u0432\u044C\u0442\u0435 \u0432 .env.example \u0445\u043E\u0442\u044F \u0431\u044B \u043E\u0434\u043D\u0443 \u0441\u0442\u0440\u043E\u043A\u0443 KEY=value,",
|
|
63
|
+
META_EMPTY_TIP_LINE_2: "\u0438\u043B\u0438 \u0441\u043E\u0437\u0434\u0430\u0439\u0442\u0435 env.meta.json \u0438 \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u0435: npx zod-envkit generate -c env.meta.json",
|
|
58
64
|
SCHEMA_LOAD_FAILED: "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0444\u0430\u0439\u043B \u0441\u0445\u0435\u043C\u044B:",
|
|
59
65
|
SCHEMA_NOT_OBJECT: "\u0424\u0430\u0439\u043B \u0441\u0445\u0435\u043C\u044B \u0434\u043E\u043B\u0436\u0435\u043D \u044D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C Zod object (z.object(...)).",
|
|
60
66
|
SCHEMA_VARS_NOT_IN_META: "\u041F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0435 \u0441\u0445\u0435\u043C\u044B \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442 \u0432 env.meta.json:",
|
|
@@ -167,8 +173,8 @@ function loadMeta(lang, configFile) {
|
|
|
167
173
|
`- ${examplePath}`,
|
|
168
174
|
"",
|
|
169
175
|
t(lang, "META_TIP"),
|
|
170
|
-
|
|
171
|
-
|
|
176
|
+
` ${t(lang, "META_EMPTY_TIP_LINE_1")}`,
|
|
177
|
+
` ${t(lang, "META_EMPTY_TIP_LINE_2")}`
|
|
172
178
|
]);
|
|
173
179
|
}
|
|
174
180
|
console.warn(`\u26A0\uFE0F ${t(lang, "META_FALLBACK_EXAMPLE")}`);
|
|
@@ -440,7 +446,7 @@ function registerCheck(program2, getLang2) {
|
|
|
440
446
|
if (opts.schema) {
|
|
441
447
|
const schemaMode = String(opts.schemaMode ?? "strict").toLowerCase();
|
|
442
448
|
if (schemaMode !== "warn" && schemaMode !== "strict") {
|
|
443
|
-
fail(lang, "
|
|
449
|
+
fail(lang, "INVALID_SCHEMA_MODE", ["- warn | strict"]);
|
|
444
450
|
}
|
|
445
451
|
const { keys: schemaKeys } = await loadSchemaFile(opts.schema, lang);
|
|
446
452
|
const metaKeys = new Set(Object.keys(meta));
|
|
@@ -451,7 +457,7 @@ function registerCheck(program2, getLang2) {
|
|
|
451
457
|
const lines = [];
|
|
452
458
|
if (inSchemaNotMeta.length) {
|
|
453
459
|
lines.push(`\u274C ${t(lang, "SCHEMA_VARS_NOT_IN_META")}`);
|
|
454
|
-
inSchemaNotMeta.forEach((k) => lines.push(`- ${k}`));
|
|
460
|
+
inSchemaNotMeta.sort((a, b) => a.localeCompare(b)).forEach((k) => lines.push(`- ${k}`));
|
|
455
461
|
lines.push(` ${t(lang, "SCHEMA_HINT_ADD_TO_META")}`);
|
|
456
462
|
lines.push("");
|
|
457
463
|
}
|
package/dist/index.cjs
CHANGED
|
@@ -231,7 +231,7 @@ var SECRET_PATTERNS = [
|
|
|
231
231
|
(k) => k.includes("SESSION"),
|
|
232
232
|
(k) => k.includes("CREDENTIAL"),
|
|
233
233
|
(k) => k.includes("CREDS"),
|
|
234
|
-
(k) => k.includes("DATABASE_URL") || k === "DB_URL",
|
|
234
|
+
(k) => k.includes("DATABASE_URL") || k === "DB_URL" || k === "POSTGRES_URL" || k === "MYSQL_URL" || k === "DATABASE",
|
|
235
235
|
(k) => k.includes("CONNECTION_STRING")
|
|
236
236
|
];
|
|
237
237
|
function isSecretKey(key) {
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zod-envkit",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.5",
|
|
4
4
|
"description": "Validate environment variables with Zod and generate .env.example",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "",
|
|
@@ -49,8 +49,9 @@
|
|
|
49
49
|
"test:preprod:robust": "pnpm build && PREPROD_ITER=30 vitest run tests/test/preprod/30-robustness",
|
|
50
50
|
"test:before-release": "pnpm build && pnpm test:preprod && pnpm test:preprod:robust",
|
|
51
51
|
"ci:smoke": "pnpm build && node dist/cli/index.js --help",
|
|
52
|
+
"ci:release-hygiene": "node scripts/validate-release-state.cjs",
|
|
52
53
|
"ci:docs": "pnpm docs:build",
|
|
53
|
-
"ci:all": "pnpm ci:smoke && pnpm test && pnpm ci:docs",
|
|
54
|
+
"ci:all": "pnpm ci:smoke && pnpm test && pnpm ci:release-hygiene && pnpm ci:docs",
|
|
54
55
|
"prepublishOnly": "pnpm build && pnpm test",
|
|
55
56
|
"docs:api": "typedoc --tsconfig tsconfig.docs.json --entryPoints src/index.ts",
|
|
56
57
|
"docs:build": "pnpm docs:api && node scripts/copy-changelog-to-docs.cjs && vitepress build docs",
|