@knapsack/schema-utils 5.0.0--canary.6593.4738696.0 β†’ 5.0.0

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/.lintstagedrc.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { dirname } from 'path';
2
- import { fileURLToPath } from 'url';
1
+ import { dirname } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
3
 
4
4
  import defaultConfig from '../../.lintstagedrc.mjs';
5
5
 
package/CHANGELOG.md CHANGED
@@ -1,3 +1,121 @@
1
+ # v4.89.8 (Fri Feb 20 2026)
2
+
3
+ ### Release Notes
4
+
5
+ #### KSP-7685: Synthetic Data for Conflict Enrichment/Resolution testing ([#7154](https://github.com/knapsack-labs/app-monorepo/pull/7154))
6
+
7
+ * **Documentation**
8
+ * Added synthetic multi-source test fixtures including component documentation, design tokens, and brand guidelines for comprehensive testing coverage.
9
+
10
+ <!-- end of auto-generated comment: release notes by coderabbit.ai -->
11
+
12
+ ---
13
+
14
+ #### πŸ› Bug Fix
15
+
16
+ - Add typescript devDependency to color-utils [#7205](https://github.com/knapsack-labs/app-monorepo/pull/7205) ([@freneticpixel](https://github.com/freneticpixel))
17
+ - merge latest in ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
18
+ - Merge branch 'latest' into sxa/KSP-7037-tests-v2 ([@sxalexander](https://github.com/sxalexander))
19
+ - Use node: protocol prefix in all .lintstagedrc.mjs files ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
20
+ - Migrated ESLint config to flat config format (ESLint 9) ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
21
+
22
+ #### 🏠 Internal
23
+
24
+ - KSP-7685: Synthetic Data for Conflict Enrichment/Resolution testing [#7154](https://github.com/knapsack-labs/app-monorepo/pull/7154) ([@sxalexander](https://github.com/sxalexander))
25
+ - KSP-5524 Migrated ESLint config to flat config format (ESLint 9) [#7162](https://github.com/knapsack-labs/app-monorepo/pull/7162) ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
26
+
27
+ #### Authors: 3
28
+
29
+ - [@EmmanuelVelez](https://github.com/EmmanuelVelez)
30
+ - Jim Frenette ([@freneticpixel](https://github.com/freneticpixel))
31
+ - Sam Alexander ([@sxalexander](https://github.com/sxalexander))
32
+
33
+ ---
34
+
35
+ # v4.89.7 (Fri Feb 06 2026)
36
+
37
+ #### πŸ› Bug Fix
38
+
39
+ - Merge branch 'latest' into feature/ksp-6555-remove-app-client-watchers-for-files-in-data-directory ([@EvanLovely](https://github.com/EvanLovely))
40
+ - Merge branch 'latest' into feature/ksp-6555-remove-app-client-watchers-for-files-in-data-directory ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
41
+
42
+ #### 🏠 Internal
43
+
44
+ - use new native url utils [#7144](https://github.com/knapsack-labs/app-monorepo/pull/7144) ([@EvanLovely](https://github.com/EvanLovely))
45
+ - KSP-6106 Added consistent-type-imports rule with inline type syntax [#7128](https://github.com/knapsack-labs/app-monorepo/pull/7128) ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
46
+ - KSP-7692: expand server actions body size limit [#7097](https://github.com/knapsack-labs/app-monorepo/pull/7097) ([@illepic](https://github.com/illepic))
47
+ - KSP-7623 resolved some of react-hooks/set-state-in-effect lint errors and enab… [#7077](https://github.com/knapsack-labs/app-monorepo/pull/7077) ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
48
+
49
+ #### Authors: 3
50
+
51
+ - [@EmmanuelVelez](https://github.com/EmmanuelVelez)
52
+ - Christopher Bloom ([@illepic](https://github.com/illepic))
53
+ - Evan Lovely ([@EvanLovely](https://github.com/EvanLovely))
54
+
55
+ ---
56
+
57
+ # v4.89.4 (Mon Jan 05 2026)
58
+
59
+ #### 🏠 Internal
60
+
61
+ - KSP-6086 normalize error and log metadata for api domains [#6997](https://github.com/knapsack-labs/app-monorepo/pull/6997) ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
62
+
63
+ #### Authors: 1
64
+
65
+ - [@EmmanuelVelez](https://github.com/EmmanuelVelez)
66
+
67
+ ---
68
+
69
+ # v4.89.3 (Thu Dec 11 2025)
70
+
71
+ #### πŸ› Bug Fix
72
+
73
+ - KSP-6536 Fixed align token metrics counting with UI logic for variables and collections [#6778](https://github.com/knapsack-labs/app-monorepo/pull/6778) ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
74
+ - Merge remote-tracking branch 'origin/feature/ksp-6536-metrics-not-computing-tokens-and-variables-correctly' into feature/ksp-6536-metrics-not-computing-tokens-and-variables-correctly ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
75
+ - Merge branch 'latest' into feature/ksp-6536-metrics-not-computing-tokens-and-variables-correctly ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
76
+
77
+ #### Authors: 1
78
+
79
+ - [@EmmanuelVelez](https://github.com/EmmanuelVelez)
80
+
81
+ ---
82
+
83
+ # v4.89.1 (Wed Dec 10 2025)
84
+
85
+ #### πŸ› Bug Fix
86
+
87
+ - Merge remote-tracking branch 'origin/latest' into KSP-6900_mcp_onboarding_pages ([@brittanysmart](https://github.com/brittanysmart))
88
+
89
+ #### Authors: 1
90
+
91
+ - Brittany Smart ([@brittanysmart](https://github.com/brittanysmart))
92
+
93
+ ---
94
+
95
+ # v4.87.9 (Thu Nov 20 2025)
96
+
97
+ #### 🏠 Internal
98
+
99
+ - chore(deps): update typescript [#6933](https://github.com/knapsack-labs/app-monorepo/pull/6933) ([@renovate[bot]](https://github.com/renovate[bot]))
100
+
101
+ #### Authors: 1
102
+
103
+ - [@renovate[bot]](https://github.com/renovate[bot])
104
+
105
+ ---
106
+
107
+ # v4.87.6 (Wed Nov 05 2025)
108
+
109
+ #### 🏠 Internal
110
+
111
+ - Add comprehensive testing for remaining frameworks and MUI lib [#6876](https://github.com/knapsack-labs/app-monorepo/pull/6876) ([@mabry1985](https://github.com/mabry1985))
112
+
113
+ #### Authors: 1
114
+
115
+ - Josh Mabry ([@mabry1985](https://github.com/mabry1985))
116
+
117
+ ---
118
+
1
119
  # v4.87.4 (Fri Oct 31 2025)
2
120
 
3
121
  #### 🏠 Internal
@@ -1,8 +1,9 @@
1
- import * as Ajv from 'ajv';
2
- import Ajv__default from 'ajv';
1
+ import Ajv, { ErrorObject } from 'ajv';
2
+ import { JsonSchemaObject } from '@knapsack/types';
3
+ import { z } from 'zod';
3
4
 
4
- declare const ajv: Ajv__default.Ajv;
5
- type ajvErrors = Ajv.ErrorObject[];
5
+ declare const ajv: Ajv.Ajv;
6
+ type ajvErrors = ErrorObject[];
6
7
  /**
7
8
  * Validate Schema itself (metaSchema)
8
9
  * Validates against contents of the `$schema` field
@@ -12,6 +13,10 @@ declare function validateSchema(schema: Record<string, unknown>): {
12
13
  ok: boolean;
13
14
  message: string;
14
15
  };
16
+ /**
17
+ * Validates a {@link JsonSchemaObject} using Zod
18
+ */
19
+ declare const jsonSchemaZodSchema: z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodTransform<JsonSchemaObject, Record<string, unknown>>>;
15
20
  /**
16
21
  * Validate Schema and Assign Defaults
17
22
  * Any `default` on properties will be added if that property is absent
@@ -32,4 +37,4 @@ declare function validateDataAgainstSchema<T>(schema: Record<string, unknown>, d
32
37
  errors?: ajvErrors;
33
38
  };
34
39
 
35
- export { ajv, validateDataAgainstSchema, validateSchema, validateSchemaAndAssignDefaults };
40
+ export { ajv, jsonSchemaZodSchema, validateDataAgainstSchema, validateSchema, validateSchemaAndAssignDefaults };
@@ -1,8 +1,9 @@
1
- import * as Ajv from 'ajv';
2
- import Ajv__default from 'ajv';
1
+ import Ajv, { ErrorObject } from 'ajv';
2
+ import { JsonSchemaObject } from '@knapsack/types';
3
+ import { z } from 'zod';
3
4
 
4
- declare const ajv: Ajv__default.Ajv;
5
- type ajvErrors = Ajv.ErrorObject[];
5
+ declare const ajv: Ajv.Ajv;
6
+ type ajvErrors = ErrorObject[];
6
7
  /**
7
8
  * Validate Schema itself (metaSchema)
8
9
  * Validates against contents of the `$schema` field
@@ -12,6 +13,10 @@ declare function validateSchema(schema: Record<string, unknown>): {
12
13
  ok: boolean;
13
14
  message: string;
14
15
  };
16
+ /**
17
+ * Validates a {@link JsonSchemaObject} using Zod
18
+ */
19
+ declare const jsonSchemaZodSchema: z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodTransform<JsonSchemaObject, Record<string, unknown>>>;
15
20
  /**
16
21
  * Validate Schema and Assign Defaults
17
22
  * Any `default` on properties will be added if that property is absent
@@ -32,4 +37,4 @@ declare function validateDataAgainstSchema<T>(schema: Record<string, unknown>, d
32
37
  errors?: ajvErrors;
33
38
  };
34
39
 
35
- export { ajv, validateDataAgainstSchema, validateSchema, validateSchemaAndAssignDefaults };
40
+ export { ajv, jsonSchemaZodSchema, validateDataAgainstSchema, validateSchema, validateSchemaAndAssignDefaults };
@@ -1,2 +1,2 @@
1
- 'use strict';var l=require('ajv'),g=require('ajv-keywords/keywords/typeof.js');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var l__default=/*#__PURE__*/_interopDefault(l);var g__default=/*#__PURE__*/_interopDefault(g);var m=Object.defineProperty;var t=(e,r)=>m(e,"name",{value:r,configurable:true});var s=new l__default.default;g__default.default(s);var c=new l__default.default({useDefaults:true});function d(e){let r=s.validateSchema(e);return {ok:r,message:r?"":`Schema itself is not valid. ${s.errorsText()}`}}t(d,"validateSchema");function v(e,r){let{ok:a,message:n}=d(e);if(!a)return {ok:false,message:n,data:r};let o={...r},i=!!c.validate(e,o);return {ok:i,message:i?"":c.errorsText(),data:o}}t(v,"validateSchemaAndAssignDefaults");function p(e,r){let{ok:a,message:n}=d(e);if(!a)return {ok:false,message:n};let o=!!s.validate(e,r);return {ok:o,message:o?"":s.errorsText(),errors:o?[]:s.errors||[]}}t(p,"validateDataAgainstSchema");exports.ajv=s;exports.validateDataAgainstSchema=p;exports.validateSchema=d;exports.validateSchemaAndAssignDefaults=v;//# sourceMappingURL=schema-utils.js.map
1
+ 'use strict';var u=require('ajv'),l=require('ajv-keywords/keywords/typeof.js'),zod=require('zod');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var u__default=/*#__PURE__*/_interopDefault(u);var l__default=/*#__PURE__*/_interopDefault(l);var f=Object.defineProperty;var n=(e,o)=>f(e,"name",{value:o,configurable:true});var s=new u__default.default;l__default.default(s);var d=new u__default.default({useDefaults:true});function c(e){let o=s.validateSchema(e);return {ok:o,message:o?"":`Schema itself is not valid. ${s.errorsText()}`}}n(c,"validateSchema");var j=zod.z.record(zod.z.string(),zod.z.unknown()).superRefine((e,o)=>{let{ok:t,message:a}=c(e);t||o.addIssue({code:"custom",message:a});}).transform(e=>e);function S(e,o){let{ok:t,message:a}=c(e);if(!t)return {ok:false,message:a,data:o};let r={...o},m=!!d.validate(e,r);return {ok:m,message:m?"":d.errorsText(),data:r}}n(S,"validateSchemaAndAssignDefaults");function T(e,o){let{ok:t,message:a}=c(e);if(!t)return {ok:false,message:a};let r=!!s.validate(e,o);return {ok:r,message:r?"":s.errorsText(),errors:r?[]:s.errors||[]}}n(T,"validateDataAgainstSchema");exports.ajv=s;exports.jsonSchemaZodSchema=j;exports.validateDataAgainstSchema=T;exports.validateSchema=c;exports.validateSchemaAndAssignDefaults=S;//# sourceMappingURL=schema-utils.js.map
2
2
  //# sourceMappingURL=schema-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schema-utils.ts"],"names":["ajv","Ajv","addTypeofKeyword","ajvDefaults","validateSchema","schema","isSchemaValid","__name","validateSchemaAndAssignDefaults","data","ok","message","newData","isValid","validateDataAgainstSchema"],"mappings":"8OAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,KAGaA,CAAM,CAAA,IAAIC,mBAEvBC,kBAAAA,CAAiBF,CAAG,CAIpB,CAAA,IAAMG,CAAc,CAAA,IAAIF,mBAAI,CAC1B,WAAA,CAAa,IACf,CAAC,EAOM,SAASG,CAAAA,CAAeC,CAG7B,CAAA,CACA,IAAMC,CAAgBN,CAAAA,CAAAA,CAAI,cAAeK,CAAAA,CAAM,EAC/C,OAAO,CACL,GAAIC,CACJ,CAAA,OAAA,CAASA,EACL,EACA,CAAA,CAAA,4BAAA,EAA+BN,CAAI,CAAA,UAAA,EAAY,CACrD,CAAA,CACF,CAXgBO,CAAAA,CAAAH,EAAA,gBAkBT,CAAA,CAAA,SAASI,CACdH,CAAAA,CAAAA,CACAI,EAC2C,CAC3C,GAAM,CAAE,EAAA,CAAAC,EAAI,OAAAC,CAAAA,CAAQ,CAAIP,CAAAA,CAAAA,CAAeC,CAAM,CAC7C,CAAA,GAAI,CAACK,CAAAA,CACH,OAAO,CACL,EAAA,CAAI,KACJ,CAAA,OAAA,CAAAC,EACA,IAAAF,CAAAA,CACF,EAGF,IAAMG,CAAAA,CAAU,CAAE,GAAGH,CAAK,CAEpBI,CAAAA,CAAAA,CAAU,CAAC,CAACV,CAAAA,CAAY,QAASE,CAAAA,CAAAA,CAAQO,CAAO,CACtD,CAAA,OAAO,CACL,EAAA,CAAIC,EACJ,OAASA,CAAAA,CAAAA,CAAU,EAAKV,CAAAA,CAAAA,CAAY,YACpC,CAAA,IAAA,CAAMS,CACR,CACF,CArBgBL,CAAAC,CAAAA,CAAAA,CAAA,iCA2BT,CAAA,CAAA,SAASM,EACdT,CACAI,CAAAA,CAAAA,CAKA,CACA,GAAM,CAAE,EAAAC,CAAAA,CAAAA,CAAI,QAAAC,CAAQ,CAAA,CAAIP,EAAeC,CAAM,CAAA,CAC7C,GAAI,CAACK,EACH,OAAO,CACL,EAAI,CAAA,KAAA,CACJ,QAAAC,CACF,CAAA,CAGF,IAAME,CAAAA,CAAU,CAAC,CAACb,CAAAA,CAAI,SAASK,CAAQI,CAAAA,CAAI,EAC3C,OAAO,CACL,EAAII,CAAAA,CAAAA,CACJ,QAASA,CAAU,CAAA,EAAA,CAAKb,CAAI,CAAA,UAAA,GAC5B,MAAQa,CAAAA,CAAAA,CAAU,EAAC,CAAIb,EAAI,MAAU,EAAA,EACvC,CACF,CAtBgBO,EAAAO,CAAA,CAAA,2BAAA,CAAA","file":"schema-utils.js","sourcesContent":["import Ajv from 'ajv'; // https://github.com/epoberezkin/ajv\nimport addTypeofKeyword from 'ajv-keywords/keywords/typeof.js';\n\nexport const ajv = new Ajv();\n\naddTypeofKeyword(ajv);\n\ntype ajvErrors = import('ajv').ErrorObject[];\n\nconst ajvDefaults = new Ajv({\n useDefaults: true,\n});\n\n/**\n * Validate Schema itself (metaSchema)\n * Validates against contents of the `$schema` field\n * @link https://github.com/epoberezkin/ajv#validateschemaobject-schema---boolean\n */\nexport function validateSchema(schema: Record<string, unknown>): {\n ok: boolean;\n message: string;\n} {\n const isSchemaValid = ajv.validateSchema(schema);\n return {\n ok: isSchemaValid,\n message: isSchemaValid\n ? ''\n : `Schema itself is not valid. ${ajv.errorsText()}`,\n };\n}\n\n/**\n * Validate Schema and Assign Defaults\n * Any `default` on properties will be added if that property is absent\n * @link https://github.com/epoberezkin/ajv#assigning-defaults\n */\nexport function validateSchemaAndAssignDefaults<T>(\n schema: Record<string, unknown>,\n data: T,\n): { ok: boolean; message: string; data: T } {\n const { ok, message } = validateSchema(schema);\n if (!ok) {\n return {\n ok: false,\n message,\n data,\n };\n }\n\n const newData = { ...data };\n // This `validate` function mutates `newData`, so that's why we created a new object above first.\n const isValid = !!ajvDefaults.validate(schema, newData);\n return {\n ok: isValid,\n message: isValid ? '' : ajvDefaults.errorsText(),\n data: newData,\n };\n}\n\n/**\n * Validate Data against Schema\n * @link https://github.com/epoberezkin/ajv\n */\nexport function validateDataAgainstSchema<T>(\n schema: Record<string, unknown>,\n data: T,\n): {\n ok: boolean;\n message: string;\n errors?: ajvErrors;\n} {\n const { ok, message } = validateSchema(schema);\n if (!ok) {\n return {\n ok: false,\n message,\n };\n }\n\n const isValid = !!ajv.validate(schema, data);\n return {\n ok: isValid,\n message: isValid ? '' : ajv.errorsText(),\n errors: isValid ? [] : ajv.errors || [],\n };\n}\n\n//\n"]}
1
+ {"version":3,"sources":["../src/schema-utils.ts"],"names":["ajv","Ajv","addTypeofKeyword","ajvDefaults","validateSchema","schema","isSchemaValid","__name","jsonSchemaZodSchema","z","data","ctx","ok","message","validateSchemaAndAssignDefaults","newData","isValid","validateDataAgainstSchema"],"mappings":"kVAKO,IAAMA,CAAAA,CAAM,IAAIC,mBAEvBC,kBAAAA,CAAiBF,CAAG,CAAA,CAIpB,IAAMG,EAAc,IAAIF,kBAAAA,CAAI,CAC1B,WAAA,CAAa,IACf,CAAC,EAOM,SAASG,CAAAA,CAAeC,EAG7B,CACA,IAAMC,EAAgBN,CAAAA,CAAI,cAAA,CAAeK,CAAM,CAAA,CAC/C,OAAO,CACL,GAAIC,CAAAA,CACJ,OAAA,CAASA,EACL,EAAA,CACA,CAAA,4BAAA,EAA+BN,EAAI,UAAA,EAAY,CAAA,CACrD,CACF,CAXgBO,CAAAA,CAAAH,EAAA,gBAAA,CAAA,CAgBT,IAAMI,EAAsBC,KAAAA,CAChC,MAAA,CAAOA,MAAE,MAAA,EAAO,CAAGA,KAAAA,CAAE,OAAA,EAAS,CAAA,CAC9B,YAAY,CAACC,CAAAA,CAAMC,IAAQ,CAC1B,GAAM,CAAE,EAAA,CAAAC,CAAAA,CAAI,OAAA,CAAAC,CAAQ,CAAA,CAAIT,CAAAA,CAAeM,CAAI,CAAA,CACtCE,CAAAA,EACHD,EAAI,QAAA,CAAS,CACX,KAAM,QAAA,CACN,OAAA,CAAAE,CACF,CAAC,EAEL,CAAC,EACA,SAAA,CAAWH,CAAAA,EAASA,CAAwB,EAOxC,SAASI,CAAAA,CACdT,EACAK,CAAAA,CAC2C,CAC3C,GAAM,CAAE,EAAA,CAAAE,CAAAA,CAAI,QAAAC,CAAQ,CAAA,CAAIT,EAAeC,CAAM,CAAA,CAC7C,GAAI,CAACO,CAAAA,CACH,OAAO,CACL,EAAA,CAAI,KAAA,CACJ,QAAAC,CAAAA,CACA,IAAA,CAAAH,CACF,CAAA,CAGF,IAAMK,EAAU,CAAE,GAAGL,CAAK,CAAA,CAEpBM,CAAAA,CAAU,CAAC,CAACb,CAAAA,CAAY,QAAA,CAASE,EAAQU,CAAO,CAAA,CACtD,OAAO,CACL,EAAA,CAAIC,CAAAA,CACJ,OAAA,CAASA,CAAAA,CAAU,EAAA,CAAKb,EAAY,UAAA,EAAW,CAC/C,IAAA,CAAMY,CACR,CACF,CArBgBR,EAAAO,CAAAA,CAAA,iCAAA,CAAA,CA2BT,SAASG,CAAAA,CACdZ,CAAAA,CACAK,CAAAA,CAKA,CACA,GAAM,CAAE,GAAAE,CAAAA,CAAI,OAAA,CAAAC,CAAQ,CAAA,CAAIT,CAAAA,CAAeC,CAAM,CAAA,CAC7C,GAAI,CAACO,EACH,OAAO,CACL,GAAI,KAAA,CACJ,OAAA,CAAAC,CACF,CAAA,CAGF,IAAMG,CAAAA,CAAU,CAAC,CAAChB,CAAAA,CAAI,SAASK,CAAAA,CAAQK,CAAI,EAC3C,OAAO,CACL,GAAIM,CAAAA,CACJ,OAAA,CAASA,CAAAA,CAAU,EAAA,CAAKhB,CAAAA,CAAI,UAAA,GAC5B,MAAA,CAAQgB,CAAAA,CAAU,EAAC,CAAIhB,CAAAA,CAAI,MAAA,EAAU,EACvC,CACF,CAtBgBO,CAAAA,CAAAU,CAAAA,CAAA,2BAAA,CAAA","file":"schema-utils.js","sourcesContent":["import Ajv, { type ErrorObject } from 'ajv'; // https://github.com/epoberezkin/ajv\nimport addTypeofKeyword from 'ajv-keywords/keywords/typeof.js';\nimport { type JsonSchemaObject } from '@knapsack/types';\nimport { z } from 'zod';\n\nexport const ajv = new Ajv();\n\naddTypeofKeyword(ajv);\n\ntype ajvErrors = ErrorObject[];\n\nconst ajvDefaults = new Ajv({\n useDefaults: true,\n});\n\n/**\n * Validate Schema itself (metaSchema)\n * Validates against contents of the `$schema` field\n * @link https://github.com/epoberezkin/ajv#validateschemaobject-schema---boolean\n */\nexport function validateSchema(schema: Record<string, unknown>): {\n ok: boolean;\n message: string;\n} {\n const isSchemaValid = ajv.validateSchema(schema);\n return {\n ok: isSchemaValid,\n message: isSchemaValid\n ? ''\n : `Schema itself is not valid. ${ajv.errorsText()}`,\n };\n}\n\n/**\n * Validates a {@link JsonSchemaObject} using Zod\n */\nexport const jsonSchemaZodSchema = z\n .record(z.string(), z.unknown())\n .superRefine((data, ctx) => {\n const { ok, message } = validateSchema(data);\n if (!ok) {\n ctx.addIssue({\n code: 'custom',\n message,\n });\n }\n })\n .transform((data) => data as JsonSchemaObject);\n\n/**\n * Validate Schema and Assign Defaults\n * Any `default` on properties will be added if that property is absent\n * @link https://github.com/epoberezkin/ajv#assigning-defaults\n */\nexport function validateSchemaAndAssignDefaults<T>(\n schema: Record<string, unknown>,\n data: T,\n): { ok: boolean; message: string; data: T } {\n const { ok, message } = validateSchema(schema);\n if (!ok) {\n return {\n ok: false,\n message,\n data,\n };\n }\n\n const newData = { ...data };\n // This `validate` function mutates `newData`, so that's why we created a new object above first.\n const isValid = !!ajvDefaults.validate(schema, newData);\n return {\n ok: isValid,\n message: isValid ? '' : ajvDefaults.errorsText(),\n data: newData,\n };\n}\n\n/**\n * Validate Data against Schema\n * @link https://github.com/epoberezkin/ajv\n */\nexport function validateDataAgainstSchema<T>(\n schema: Record<string, unknown>,\n data: T,\n): {\n ok: boolean;\n message: string;\n errors?: ajvErrors;\n} {\n const { ok, message } = validateSchema(schema);\n if (!ok) {\n return {\n ok: false,\n message,\n };\n }\n\n const isValid = !!ajv.validate(schema, data);\n return {\n ok: isValid,\n message: isValid ? '' : ajv.errorsText(),\n errors: isValid ? [] : ajv.errors || [],\n };\n}\n\n//\n"]}
@@ -1,2 +1,2 @@
1
- import l from'ajv';import g from'ajv-keywords/keywords/typeof.js';var m=Object.defineProperty;var t=(e,r)=>m(e,"name",{value:r,configurable:true});var s=new l;g(s);var c=new l({useDefaults:true});function d(e){let r=s.validateSchema(e);return {ok:r,message:r?"":`Schema itself is not valid. ${s.errorsText()}`}}t(d,"validateSchema");function v(e,r){let{ok:a,message:n}=d(e);if(!a)return {ok:false,message:n,data:r};let o={...r},i=!!c.validate(e,o);return {ok:i,message:i?"":c.errorsText(),data:o}}t(v,"validateSchemaAndAssignDefaults");function p(e,r){let{ok:a,message:n}=d(e);if(!a)return {ok:false,message:n};let o=!!s.validate(e,r);return {ok:o,message:o?"":s.errorsText(),errors:o?[]:s.errors||[]}}t(p,"validateDataAgainstSchema");export{s as ajv,p as validateDataAgainstSchema,d as validateSchema,v as validateSchemaAndAssignDefaults};//# sourceMappingURL=schema-utils.mjs.map
1
+ import u from'ajv';import l from'ajv-keywords/keywords/typeof.js';import {z}from'zod';var f=Object.defineProperty;var n=(e,o)=>f(e,"name",{value:o,configurable:true});var s=new u;l(s);var d=new u({useDefaults:true});function c(e){let o=s.validateSchema(e);return {ok:o,message:o?"":`Schema itself is not valid. ${s.errorsText()}`}}n(c,"validateSchema");var j=z.record(z.string(),z.unknown()).superRefine((e,o)=>{let{ok:t,message:a}=c(e);t||o.addIssue({code:"custom",message:a});}).transform(e=>e);function S(e,o){let{ok:t,message:a}=c(e);if(!t)return {ok:false,message:a,data:o};let r={...o},m=!!d.validate(e,r);return {ok:m,message:m?"":d.errorsText(),data:r}}n(S,"validateSchemaAndAssignDefaults");function T(e,o){let{ok:t,message:a}=c(e);if(!t)return {ok:false,message:a};let r=!!s.validate(e,o);return {ok:r,message:r?"":s.errorsText(),errors:r?[]:s.errors||[]}}n(T,"validateDataAgainstSchema");export{s as ajv,j as jsonSchemaZodSchema,T as validateDataAgainstSchema,c as validateSchema,S as validateSchemaAndAssignDefaults};//# sourceMappingURL=schema-utils.mjs.map
2
2
  //# sourceMappingURL=schema-utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schema-utils.ts"],"names":["ajv","Ajv","addTypeofKeyword","ajvDefaults","validateSchema","schema","isSchemaValid","__name","validateSchemaAndAssignDefaults","data","ok","message","newData","isValid","validateDataAgainstSchema"],"mappings":"kEAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,KAGaA,CAAM,CAAA,IAAIC,EAEvBC,CAAAA,CAAiBF,CAAG,CAIpB,CAAA,IAAMG,CAAc,CAAA,IAAIF,EAAI,CAC1B,WAAA,CAAa,IACf,CAAC,EAOM,SAASG,CAAAA,CAAeC,CAG7B,CAAA,CACA,IAAMC,CAAgBN,CAAAA,CAAAA,CAAI,cAAeK,CAAAA,CAAM,EAC/C,OAAO,CACL,GAAIC,CACJ,CAAA,OAAA,CAASA,EACL,EACA,CAAA,CAAA,4BAAA,EAA+BN,CAAI,CAAA,UAAA,EAAY,CACrD,CAAA,CACF,CAXgBO,CAAAA,CAAAH,EAAA,gBAkBT,CAAA,CAAA,SAASI,CACdH,CAAAA,CAAAA,CACAI,EAC2C,CAC3C,GAAM,CAAE,EAAA,CAAAC,EAAI,OAAAC,CAAAA,CAAQ,CAAIP,CAAAA,CAAAA,CAAeC,CAAM,CAC7C,CAAA,GAAI,CAACK,CAAAA,CACH,OAAO,CACL,EAAA,CAAI,KACJ,CAAA,OAAA,CAAAC,EACA,IAAAF,CAAAA,CACF,EAGF,IAAMG,CAAAA,CAAU,CAAE,GAAGH,CAAK,CAEpBI,CAAAA,CAAAA,CAAU,CAAC,CAACV,CAAAA,CAAY,QAASE,CAAAA,CAAAA,CAAQO,CAAO,CACtD,CAAA,OAAO,CACL,EAAA,CAAIC,EACJ,OAASA,CAAAA,CAAAA,CAAU,EAAKV,CAAAA,CAAAA,CAAY,YACpC,CAAA,IAAA,CAAMS,CACR,CACF,CArBgBL,CAAAC,CAAAA,CAAAA,CAAA,iCA2BT,CAAA,CAAA,SAASM,EACdT,CACAI,CAAAA,CAAAA,CAKA,CACA,GAAM,CAAE,EAAAC,CAAAA,CAAAA,CAAI,QAAAC,CAAQ,CAAA,CAAIP,EAAeC,CAAM,CAAA,CAC7C,GAAI,CAACK,EACH,OAAO,CACL,EAAI,CAAA,KAAA,CACJ,QAAAC,CACF,CAAA,CAGF,IAAME,CAAAA,CAAU,CAAC,CAACb,CAAAA,CAAI,SAASK,CAAQI,CAAAA,CAAI,EAC3C,OAAO,CACL,EAAII,CAAAA,CAAAA,CACJ,QAASA,CAAU,CAAA,EAAA,CAAKb,CAAI,CAAA,UAAA,GAC5B,MAAQa,CAAAA,CAAAA,CAAU,EAAC,CAAIb,EAAI,MAAU,EAAA,EACvC,CACF,CAtBgBO,EAAAO,CAAA,CAAA,2BAAA,CAAA","file":"schema-utils.mjs","sourcesContent":["import Ajv from 'ajv'; // https://github.com/epoberezkin/ajv\nimport addTypeofKeyword from 'ajv-keywords/keywords/typeof.js';\n\nexport const ajv = new Ajv();\n\naddTypeofKeyword(ajv);\n\ntype ajvErrors = import('ajv').ErrorObject[];\n\nconst ajvDefaults = new Ajv({\n useDefaults: true,\n});\n\n/**\n * Validate Schema itself (metaSchema)\n * Validates against contents of the `$schema` field\n * @link https://github.com/epoberezkin/ajv#validateschemaobject-schema---boolean\n */\nexport function validateSchema(schema: Record<string, unknown>): {\n ok: boolean;\n message: string;\n} {\n const isSchemaValid = ajv.validateSchema(schema);\n return {\n ok: isSchemaValid,\n message: isSchemaValid\n ? ''\n : `Schema itself is not valid. ${ajv.errorsText()}`,\n };\n}\n\n/**\n * Validate Schema and Assign Defaults\n * Any `default` on properties will be added if that property is absent\n * @link https://github.com/epoberezkin/ajv#assigning-defaults\n */\nexport function validateSchemaAndAssignDefaults<T>(\n schema: Record<string, unknown>,\n data: T,\n): { ok: boolean; message: string; data: T } {\n const { ok, message } = validateSchema(schema);\n if (!ok) {\n return {\n ok: false,\n message,\n data,\n };\n }\n\n const newData = { ...data };\n // This `validate` function mutates `newData`, so that's why we created a new object above first.\n const isValid = !!ajvDefaults.validate(schema, newData);\n return {\n ok: isValid,\n message: isValid ? '' : ajvDefaults.errorsText(),\n data: newData,\n };\n}\n\n/**\n * Validate Data against Schema\n * @link https://github.com/epoberezkin/ajv\n */\nexport function validateDataAgainstSchema<T>(\n schema: Record<string, unknown>,\n data: T,\n): {\n ok: boolean;\n message: string;\n errors?: ajvErrors;\n} {\n const { ok, message } = validateSchema(schema);\n if (!ok) {\n return {\n ok: false,\n message,\n };\n }\n\n const isValid = !!ajv.validate(schema, data);\n return {\n ok: isValid,\n message: isValid ? '' : ajv.errorsText(),\n errors: isValid ? [] : ajv.errors || [],\n };\n}\n\n//\n"]}
1
+ {"version":3,"sources":["../src/schema-utils.ts"],"names":["ajv","Ajv","addTypeofKeyword","ajvDefaults","validateSchema","schema","isSchemaValid","__name","jsonSchemaZodSchema","z","data","ctx","ok","message","validateSchemaAndAssignDefaults","newData","isValid","validateDataAgainstSchema"],"mappings":"uKAKO,IAAMA,CAAAA,CAAM,IAAIC,EAEvBC,CAAAA,CAAiBF,CAAG,CAAA,CAIpB,IAAMG,EAAc,IAAIF,CAAAA,CAAI,CAC1B,WAAA,CAAa,IACf,CAAC,EAOM,SAASG,CAAAA,CAAeC,EAG7B,CACA,IAAMC,EAAgBN,CAAAA,CAAI,cAAA,CAAeK,CAAM,CAAA,CAC/C,OAAO,CACL,GAAIC,CAAAA,CACJ,OAAA,CAASA,EACL,EAAA,CACA,CAAA,4BAAA,EAA+BN,EAAI,UAAA,EAAY,CAAA,CACrD,CACF,CAXgBO,CAAAA,CAAAH,EAAA,gBAAA,CAAA,CAgBT,IAAMI,EAAsBC,CAAAA,CAChC,MAAA,CAAOA,EAAE,MAAA,EAAO,CAAGA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAC9B,YAAY,CAACC,CAAAA,CAAMC,IAAQ,CAC1B,GAAM,CAAE,EAAA,CAAAC,CAAAA,CAAI,OAAA,CAAAC,CAAQ,CAAA,CAAIT,CAAAA,CAAeM,CAAI,CAAA,CACtCE,CAAAA,EACHD,EAAI,QAAA,CAAS,CACX,KAAM,QAAA,CACN,OAAA,CAAAE,CACF,CAAC,EAEL,CAAC,EACA,SAAA,CAAWH,CAAAA,EAASA,CAAwB,EAOxC,SAASI,CAAAA,CACdT,EACAK,CAAAA,CAC2C,CAC3C,GAAM,CAAE,EAAA,CAAAE,CAAAA,CAAI,QAAAC,CAAQ,CAAA,CAAIT,EAAeC,CAAM,CAAA,CAC7C,GAAI,CAACO,CAAAA,CACH,OAAO,CACL,EAAA,CAAI,KAAA,CACJ,QAAAC,CAAAA,CACA,IAAA,CAAAH,CACF,CAAA,CAGF,IAAMK,EAAU,CAAE,GAAGL,CAAK,CAAA,CAEpBM,CAAAA,CAAU,CAAC,CAACb,CAAAA,CAAY,QAAA,CAASE,EAAQU,CAAO,CAAA,CACtD,OAAO,CACL,EAAA,CAAIC,CAAAA,CACJ,OAAA,CAASA,CAAAA,CAAU,EAAA,CAAKb,EAAY,UAAA,EAAW,CAC/C,IAAA,CAAMY,CACR,CACF,CArBgBR,EAAAO,CAAAA,CAAA,iCAAA,CAAA,CA2BT,SAASG,CAAAA,CACdZ,CAAAA,CACAK,CAAAA,CAKA,CACA,GAAM,CAAE,GAAAE,CAAAA,CAAI,OAAA,CAAAC,CAAQ,CAAA,CAAIT,CAAAA,CAAeC,CAAM,CAAA,CAC7C,GAAI,CAACO,EACH,OAAO,CACL,GAAI,KAAA,CACJ,OAAA,CAAAC,CACF,CAAA,CAGF,IAAMG,CAAAA,CAAU,CAAC,CAAChB,CAAAA,CAAI,SAASK,CAAAA,CAAQK,CAAI,EAC3C,OAAO,CACL,GAAIM,CAAAA,CACJ,OAAA,CAASA,CAAAA,CAAU,EAAA,CAAKhB,CAAAA,CAAI,UAAA,GAC5B,MAAA,CAAQgB,CAAAA,CAAU,EAAC,CAAIhB,CAAAA,CAAI,MAAA,EAAU,EACvC,CACF,CAtBgBO,CAAAA,CAAAU,CAAAA,CAAA,2BAAA,CAAA","file":"schema-utils.mjs","sourcesContent":["import Ajv, { type ErrorObject } from 'ajv'; // https://github.com/epoberezkin/ajv\nimport addTypeofKeyword from 'ajv-keywords/keywords/typeof.js';\nimport { type JsonSchemaObject } from '@knapsack/types';\nimport { z } from 'zod';\n\nexport const ajv = new Ajv();\n\naddTypeofKeyword(ajv);\n\ntype ajvErrors = ErrorObject[];\n\nconst ajvDefaults = new Ajv({\n useDefaults: true,\n});\n\n/**\n * Validate Schema itself (metaSchema)\n * Validates against contents of the `$schema` field\n * @link https://github.com/epoberezkin/ajv#validateschemaobject-schema---boolean\n */\nexport function validateSchema(schema: Record<string, unknown>): {\n ok: boolean;\n message: string;\n} {\n const isSchemaValid = ajv.validateSchema(schema);\n return {\n ok: isSchemaValid,\n message: isSchemaValid\n ? ''\n : `Schema itself is not valid. ${ajv.errorsText()}`,\n };\n}\n\n/**\n * Validates a {@link JsonSchemaObject} using Zod\n */\nexport const jsonSchemaZodSchema = z\n .record(z.string(), z.unknown())\n .superRefine((data, ctx) => {\n const { ok, message } = validateSchema(data);\n if (!ok) {\n ctx.addIssue({\n code: 'custom',\n message,\n });\n }\n })\n .transform((data) => data as JsonSchemaObject);\n\n/**\n * Validate Schema and Assign Defaults\n * Any `default` on properties will be added if that property is absent\n * @link https://github.com/epoberezkin/ajv#assigning-defaults\n */\nexport function validateSchemaAndAssignDefaults<T>(\n schema: Record<string, unknown>,\n data: T,\n): { ok: boolean; message: string; data: T } {\n const { ok, message } = validateSchema(schema);\n if (!ok) {\n return {\n ok: false,\n message,\n data,\n };\n }\n\n const newData = { ...data };\n // This `validate` function mutates `newData`, so that's why we created a new object above first.\n const isValid = !!ajvDefaults.validate(schema, newData);\n return {\n ok: isValid,\n message: isValid ? '' : ajvDefaults.errorsText(),\n data: newData,\n };\n}\n\n/**\n * Validate Data against Schema\n * @link https://github.com/epoberezkin/ajv\n */\nexport function validateDataAgainstSchema<T>(\n schema: Record<string, unknown>,\n data: T,\n): {\n ok: boolean;\n message: string;\n errors?: ajvErrors;\n} {\n const { ok, message } = validateSchema(schema);\n if (!ok) {\n return {\n ok: false,\n message,\n };\n }\n\n const isValid = !!ajv.validate(schema, data);\n return {\n ok: isValid,\n message: isValid ? '' : ajv.errorsText(),\n errors: isValid ? [] : ajv.errors || [],\n };\n}\n\n//\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@knapsack/schema-utils",
3
3
  "description": "A Knapsack component that helps build Design Systems",
4
- "version": "5.0.0--canary.6593.4738696.0",
4
+ "version": "5.0.0",
5
5
  "source": "src/schema-utils.ts",
6
6
  "main": "dist/schema-utils.js",
7
7
  "module": "dist/schema-utils.mjs",
@@ -24,15 +24,17 @@
24
24
  },
25
25
  "author": "Knapsack (https://www.knapsack.cloud)",
26
26
  "dependencies": {
27
- "ajv": "^6.12.6",
27
+ "ajv": "^6.14.0",
28
28
  "ajv-keywords": "^3.5.2",
29
- "tslib": "^2.8.1"
29
+ "zod": "^4.3.6"
30
30
  },
31
31
  "devDependencies": {
32
- "@knapsack/eslint-config-starter": "5.0.0--canary.6593.4738696.0",
33
- "@knapsack/typescript-config-starter": "5.0.0--canary.6593.4738696.0",
34
- "eslint": "^8.57.0",
35
- "tsup": "^8.5.0"
32
+ "@knapsack/eslint-config-starter": "5.0.0",
33
+ "@knapsack/types": "5.0.0",
34
+ "@knapsack/typescript-config-starter": "5.0.0",
35
+ "eslint": "^9.20.0",
36
+ "tsup": "^8.5.1",
37
+ "typescript": "^5.9.3"
36
38
  },
37
39
  "license": "GPL-2.0-or-later",
38
40
  "publishConfig": {
@@ -43,5 +45,5 @@
43
45
  "directory": "libs/schema-utils",
44
46
  "type": "git"
45
47
  },
46
- "gitHead": "4738696cd5d75f977543e5484622c251b26db3a4"
48
+ "gitHead": "31e09ba72245b95bef52e73ce5076de51936286c"
47
49
  }
package/.eslintrc.js DELETED
@@ -1,4 +0,0 @@
1
- module.exports = {
2
- extends: ['@knapsack/eslint-config-starter'],
3
- parserOptions: { tsconfigRootDir: __dirname },
4
- };