@modulify/validator 0.2.1 → 0.3.1

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.
Files changed (88) hide show
  1. package/CHANGELOG.md +29 -1
  2. package/README.md +12 -2
  3. package/dist/assert.cjs +99 -63
  4. package/dist/assert.d.cts +37 -0
  5. package/dist/assert.d.mts +37 -0
  6. package/dist/assert.d.ts +24 -3
  7. package/dist/assert.mjs +94 -64
  8. package/dist/assertions.cjs +283 -178
  9. package/dist/assertions.d.cts +56 -0
  10. package/dist/assertions.d.mts +56 -0
  11. package/dist/assertions.d.ts +43 -45
  12. package/dist/assertions.mjs +274 -201
  13. package/dist/checkers.cjs +23 -0
  14. package/dist/checkers.d.cts +8 -0
  15. package/dist/checkers.d.mts +8 -0
  16. package/dist/checkers.d.ts +1 -1
  17. package/dist/checkers.mjs +16 -0
  18. package/dist/combinators.cjs +305 -304
  19. package/dist/combinators.d.cts +16 -0
  20. package/dist/combinators.d.mts +16 -0
  21. package/dist/combinators.d.ts +15 -16
  22. package/dist/combinators.mjs +305 -314
  23. package/dist/constraints.cjs +23 -0
  24. package/dist/constraints.d.cts +4 -0
  25. package/dist/constraints.d.mts +4 -0
  26. package/dist/constraints.d.ts +2 -2
  27. package/dist/constraints.mjs +21 -0
  28. package/dist/extractors.cjs +6 -0
  29. package/dist/extractors.d.cts +2 -0
  30. package/dist/extractors.d.mts +2 -0
  31. package/dist/extractors.mjs +5 -0
  32. package/dist/index.cjs +140 -219
  33. package/dist/index.d.cts +12 -0
  34. package/dist/index.d.mts +12 -0
  35. package/dist/index.d.ts +9 -9
  36. package/dist/index.mjs +93 -222
  37. package/dist/json-schema.cjs +364 -489
  38. package/dist/json-schema.d.cts +14 -0
  39. package/dist/json-schema.d.mts +14 -0
  40. package/dist/json-schema.d.ts +3 -3
  41. package/dist/json-schema.mjs +365 -492
  42. package/dist/metadata.cjs +98 -7
  43. package/dist/metadata.d.cts +8 -0
  44. package/dist/metadata.d.mts +8 -0
  45. package/dist/metadata.d.ts +2 -2
  46. package/dist/metadata.mjs +93 -7
  47. package/dist/predicates.cjs +98 -41
  48. package/dist/predicates.d.cts +77 -0
  49. package/dist/predicates.d.mts +77 -0
  50. package/dist/predicates.d.ts +25 -4
  51. package/dist/predicates.mjs +92 -66
  52. package/dist/types/index.d.cts +984 -0
  53. package/dist/types/index.d.mts +984 -0
  54. package/dist/types/index.d.ts +984 -0
  55. package/dist/types/json-schema.d.cts +75 -0
  56. package/dist/types/json-schema.d.mts +75 -0
  57. package/dist/types/json-schema.d.ts +75 -0
  58. package/dist/violations.cjs +81 -0
  59. package/dist/violations.d.cts +29 -0
  60. package/dist/violations.d.mts +29 -0
  61. package/dist/violations.d.ts +1 -1
  62. package/dist/violations.mjs +80 -0
  63. package/docs/RELEASING.md +66 -0
  64. package/docs/en/00-index.md +2 -0
  65. package/docs/en/01-shape-api.md +35 -10
  66. package/docs/en/02-metadata-and-introspection.md +2 -1
  67. package/docs/en/03-violations.md +1 -1
  68. package/docs/en/04-json-schema-export.md +5 -0
  69. package/docs/en/05-public-api.md +35 -3
  70. package/docs/en/06-common-recipes.md +2 -1
  71. package/docs/en/07-ai-reference.md +5 -2
  72. package/docs/en/08-violation-code-types.md +28 -2
  73. package/docs/en/09-migration.md +75 -0
  74. package/docs/ru/00-index.md +2 -0
  75. package/docs/ru/01-shape-api.md +35 -10
  76. package/docs/ru/02-metadata-and-introspection.md +2 -1
  77. package/docs/ru/03-violations.md +1 -1
  78. package/docs/ru/04-json-schema-export.md +5 -0
  79. package/docs/ru/05-public-api.md +35 -3
  80. package/docs/ru/06-common-recipes.md +2 -1
  81. package/docs/ru/07-ai-reference.md +5 -2
  82. package/docs/ru/08-violation-code-types.md +28 -2
  83. package/docs/ru/09-migration.md +76 -0
  84. package/docs/ru/README.md +10 -2
  85. package/package.json +63 -37
  86. package/types/index.d.ts +275 -115
  87. package/dist/metadata.cjs.js +0 -130
  88. package/dist/metadata.es.js +0 -131
package/docs/ru/README.md CHANGED
@@ -207,7 +207,7 @@ if (ok) {
207
207
 
208
208
  ## API объектных схем
209
209
 
210
- `shape(...)` — это переиспользуемый API объектных схем. Он валидирует вложенные record-like objects и предоставляет небольшой неизменяемый API вроде `strict()`, `pick()`, `omit()`, `partial()`, `extend()`, `merge()`, `refine()` и `fieldsMatch(...)`.
210
+ `shape(...)` — это переиспользуемый API объектных схем. Он валидирует вложенные record-like objects и предоставляет небольшой неизменяемый API вроде `strict()`, `pick()`, `omit()`, `partial()`, `extend()`, `merge()`, async-first `refine()`, явного `refine.sync()` и `fieldsMatch(...)`.
211
211
 
212
212
  ```typescript
213
213
  import {
@@ -273,11 +273,17 @@ const node = describe(registration)
273
273
 
274
274
  В текущем API это обычно выглядит так:
275
275
 
276
- - leaf checks через assertions вроде `isString`, `isDefined`, `hasLength`, `oneOf`;
276
+ - guard assertions вроде `isString`, `isNumber`, `isDefined`, `oneOf(...)` задают базовый домен значения;
277
+ - refinement assertions вроде `hasLength(...)`, `hasPattern(...)`, `startsWith(...)`, `hasValue(...)`, `multipleOf(...)` проверяют свойства уже внутри этого домена;
277
278
  - композиция схем через combinators вроде `exact`, `optional`, `nullable`, `nullish`, `shape(...)`, `each(...)`;
278
279
  - типизированная валидация через `validate(...)` или `validate.sync(...)`;
279
280
  - narrowing исходной переменной в sync-коде через `matches.sync(...)`.
280
281
 
282
+ Последовательные массивы assertions теперь stage-aware. Кортеж вроде `[isString, hasLength({ min: 3 })]` типизируется, а несовместимые комбинации вроде `[isNumber, hasLength({ min: 3 })]` TypeScript отсекает.
283
+ Refinement assertions не предполагаются для одиночной передачи в `validate(...)` или `matches.sync(...)`.
284
+
285
+ `validate(...)` — основной async-first entrypoint. `validate.sync(...)` и `matches.sync(...)` остаются специализированными sync API и выбрасывают ошибку, если встречают async validators или async object-level rules из `shape(...).refine(...)`.
286
+
281
287
  ## Нарушения
282
288
 
283
289
  `validate(...)` возвращает машиночитаемый список `Violation[]`, а `collection(...)` может обернуть его в небольшой helper API для точного поиска по path и обхода дерева.
@@ -357,6 +363,8 @@ const jsonSchema = toJsonSchema(profile)
357
363
  - [Практические рецепты](./06-common-recipes.md) - практические примеры для валидации payload, выбора wrappers, переиспользуемых shape, сопоставления ошибок формы и экспорта JSON Schema.
358
364
  - [Справка для AI](./07-ai-reference.md) - компактное описание контракта для agents, инструментов и быстрого поиска семантики библиотеки.
359
365
 
366
+ - [Миграция с 0.2.1](./09-migration.md)
367
+
360
368
  ## Заметки
361
369
 
362
370
  - Assertions возвращают структурированные метаданные вместо сообщений.
package/package.json CHANGED
@@ -3,40 +3,66 @@
3
3
  "type": "module",
4
4
  "description": "Declarative validation util for JavaScript",
5
5
  "license": "MIT",
6
- "version": "0.2.1",
6
+ "version": "0.3.1",
7
7
  "exports": {
8
8
  ".": {
9
- "types": "./dist/index.d.ts",
10
- "import": "./dist/index.mjs",
11
- "require": "./dist/index.cjs",
9
+ "import": {
10
+ "types": "./dist/index.d.mts",
11
+ "default": "./dist/index.mjs"
12
+ },
13
+ "require": {
14
+ "types": "./dist/index.d.cts",
15
+ "default": "./dist/index.cjs"
16
+ },
12
17
  "default": "./dist/index.mjs"
13
18
  },
14
19
  "./assertions": {
15
- "types": "./dist/assertions.d.ts",
16
- "import": "./dist/assertions.mjs",
17
- "require": "./dist/assertions.cjs",
20
+ "import": {
21
+ "types": "./dist/assertions.d.mts",
22
+ "default": "./dist/assertions.mjs"
23
+ },
24
+ "require": {
25
+ "types": "./dist/assertions.d.cts",
26
+ "default": "./dist/assertions.cjs"
27
+ },
18
28
  "default": "./dist/assertions.mjs"
19
29
  },
20
30
  "./combinators": {
21
- "types": "./dist/combinators.d.ts",
22
- "import": "./dist/combinators.mjs",
23
- "require": "./dist/combinators.cjs",
31
+ "import": {
32
+ "types": "./dist/combinators.d.mts",
33
+ "default": "./dist/combinators.mjs"
34
+ },
35
+ "require": {
36
+ "types": "./dist/combinators.d.cts",
37
+ "default": "./dist/combinators.cjs"
38
+ },
24
39
  "default": "./dist/combinators.mjs"
25
40
  },
26
41
  "./json-schema": {
27
- "types": "./dist/json-schema.d.ts",
28
- "import": "./dist/json-schema.mjs",
29
- "require": "./dist/json-schema.cjs",
42
+ "import": {
43
+ "types": "./dist/json-schema.d.mts",
44
+ "default": "./dist/json-schema.mjs"
45
+ },
46
+ "require": {
47
+ "types": "./dist/json-schema.d.cts",
48
+ "default": "./dist/json-schema.cjs"
49
+ },
30
50
  "default": "./dist/json-schema.mjs"
31
51
  },
32
52
  "./predicates": {
33
- "types": "./dist/predicates.d.ts",
34
- "import": "./dist/predicates.mjs",
35
- "require": "./dist/predicates.cjs",
53
+ "import": {
54
+ "types": "./dist/predicates.d.mts",
55
+ "default": "./dist/predicates.mjs"
56
+ },
57
+ "require": {
58
+ "types": "./dist/predicates.d.cts",
59
+ "default": "./dist/predicates.cjs"
60
+ },
36
61
  "default": "./dist/predicates.mjs"
37
62
  }
38
63
  },
39
64
  "types": "dist/index.d.ts",
65
+ "sideEffects": false,
40
66
  "typesVersions": {
41
67
  "*": {
42
68
  "assertions": [
@@ -55,36 +81,36 @@
55
81
  },
56
82
  "scripts": {
57
83
  "build": "vite build",
58
- "lint": "eslint src tests types",
84
+ "lint": "eslint src tests types scripts vite.config.ts release.config.mjs",
59
85
  "prepare": "husky",
60
- "release": "npx --yes standard-version",
61
- "release:minor": "npx --yes standard-version --release-as minor",
62
- "release:patch": "npx --yes standard-version --release-as patch",
63
- "release:major": "npx --yes standard-version --release-as major",
86
+ "release": "conventional-release --tags",
87
+ "release:dry": "conventional-release --dry --verbose --tags",
88
+ "release:minor": "conventional-release --tags --release-as minor",
89
+ "release:patch": "conventional-release --tags --release-as patch",
90
+ "release:major": "conventional-release --tags --release-as major",
64
91
  "stats": "gzip -c ./dist/index.mjs | wc -c",
65
92
  "test": "vitest run",
66
- "test:d": "vitest run --typecheck.only",
67
- "test:coverage": "vitest run --coverage",
68
- "test:coverage:html": "vitest run --coverage --reporter=html --outputFile.html=./reports/html/report.html",
93
+ "test:d": "vitest run --typecheck.only --coverage.enabled=false",
94
+ "test:package": "yarn build && node scripts/check-package.mjs",
69
95
  "typecheck": "tsc --noEmit"
70
96
  },
71
97
  "devDependencies": {
72
- "@commitlint/cli": "^20.4.3",
73
- "@commitlint/config-conventional": "^20.4.3",
98
+ "@commitlint/cli": "^21.2.3",
99
+ "@commitlint/config-conventional": "^21.2.3",
74
100
  "@eslint/js": "^10.0.1",
75
- "@types/node": "^25.3.5",
76
- "@vitest/coverage-v8": "4.0.18",
77
- "@vitest/ui": "4.0.18",
78
- "eslint": "^10.0.3",
79
- "globals": "^17.4.0",
101
+ "@modulify/conventional-release": "^0.1.3",
102
+ "@types/node": "^24.19.0",
103
+ "@vitest/coverage-v8": "5.0.2",
104
+ "@vitest/ui": "5.0.2",
105
+ "eslint": "^10.11.0",
106
+ "globals": "^17.12.0",
80
107
  "husky": "^9.1.7",
81
- "ts-node": "^10.9.2",
82
108
  "tslib": "^2.8.1",
83
- "typescript": "^5.5.4",
84
- "typescript-eslint": "^8.56.1",
85
- "vite": "^7.3.1",
86
- "vite-plugin-dts": "^4.5.4",
87
- "vitest": "^4.0.18"
109
+ "typescript": "~6.0.3",
110
+ "typescript-eslint": "^8.70.1",
111
+ "unplugin-dts": "^1.1.1",
112
+ "vite": "^8.3.1",
113
+ "vitest": "5.0.2"
88
114
  },
89
115
  "resolutions": {
90
116
  "minimatch@npm:10.2.1": "npm:10.2.4",