@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 +2 -2
- package/CHANGELOG.md +118 -0
- package/dist/schema-utils.d.mts +10 -5
- package/dist/schema-utils.d.ts +10 -5
- package/dist/schema-utils.js +1 -1
- package/dist/schema-utils.js.map +1 -1
- package/dist/schema-utils.mjs +1 -1
- package/dist/schema-utils.mjs.map +1 -1
- package/package.json +10 -8
- package/.eslintrc.js +0 -4
package/.lintstagedrc.mjs
CHANGED
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
|
package/dist/schema-utils.d.mts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import Ajv, { ErrorObject } from 'ajv';
|
|
2
|
+
import { JsonSchemaObject } from '@knapsack/types';
|
|
3
|
+
import { z } from 'zod';
|
|
3
4
|
|
|
4
|
-
declare const ajv:
|
|
5
|
-
type ajvErrors =
|
|
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 };
|
package/dist/schema-utils.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import Ajv, { ErrorObject } from 'ajv';
|
|
2
|
+
import { JsonSchemaObject } from '@knapsack/types';
|
|
3
|
+
import { z } from 'zod';
|
|
3
4
|
|
|
4
|
-
declare const ajv:
|
|
5
|
-
type ajvErrors =
|
|
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 };
|
package/dist/schema-utils.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
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
|
package/dist/schema-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schema-utils.ts"],"names":["ajv","Ajv","addTypeofKeyword","ajvDefaults","validateSchema","schema","isSchemaValid","__name","
|
|
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"]}
|
package/dist/schema-utils.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
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","
|
|
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
|
|
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.
|
|
27
|
+
"ajv": "^6.14.0",
|
|
28
28
|
"ajv-keywords": "^3.5.2",
|
|
29
|
-
"
|
|
29
|
+
"zod": "^4.3.6"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@knapsack/eslint-config-starter": "5.0.0
|
|
33
|
-
"@knapsack/
|
|
34
|
-
"
|
|
35
|
-
"
|
|
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": "
|
|
48
|
+
"gitHead": "31e09ba72245b95bef52e73ce5076de51936286c"
|
|
47
49
|
}
|
package/.eslintrc.js
DELETED