@code-pushup/models 0.69.4 → 0.70.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.
Files changed (65) hide show
  1. package/package.json +2 -2
  2. package/src/index.d.ts +2 -1
  3. package/src/index.js +2 -1
  4. package/src/index.js.map +1 -1
  5. package/src/lib/audit-output.d.ts +108 -1188
  6. package/src/lib/audit-output.js +18 -24
  7. package/src/lib/audit-output.js.map +1 -1
  8. package/src/lib/audit.d.ts +4 -42
  9. package/src/lib/audit.js +4 -17
  10. package/src/lib/audit.js.map +1 -1
  11. package/src/lib/category-config.d.ts +22 -169
  12. package/src/lib/category-config.js +21 -28
  13. package/src/lib/category-config.js.map +1 -1
  14. package/src/lib/commit.d.ts +2 -12
  15. package/src/lib/commit.js +10 -13
  16. package/src/lib/commit.js.map +1 -1
  17. package/src/lib/configuration.d.ts +24 -0
  18. package/src/lib/configuration.js +16 -0
  19. package/src/lib/configuration.js.map +1 -0
  20. package/src/lib/core-config.d.ts +3104 -14160
  21. package/src/lib/core-config.js +6 -8
  22. package/src/lib/core-config.js.map +1 -1
  23. package/src/lib/group.d.ts +10 -124
  24. package/src/lib/group.js +6 -27
  25. package/src/lib/group.js.map +1 -1
  26. package/src/lib/implementation/checks.d.ts +8 -0
  27. package/src/lib/implementation/checks.js +28 -0
  28. package/src/lib/implementation/checks.js.map +1 -0
  29. package/src/lib/implementation/function.d.ts +22 -0
  30. package/src/lib/implementation/function.js +53 -0
  31. package/src/lib/implementation/function.js.map +1 -0
  32. package/src/lib/implementation/schemas.d.ts +868 -47
  33. package/src/lib/implementation/schemas.js +48 -41
  34. package/src/lib/implementation/schemas.js.map +1 -1
  35. package/src/lib/implementation/utils.d.ts +13 -2
  36. package/src/lib/implementation/utils.js +15 -11
  37. package/src/lib/implementation/utils.js.map +1 -1
  38. package/src/lib/issue.d.ts +13 -55
  39. package/src/lib/issue.js +10 -7
  40. package/src/lib/issue.js.map +1 -1
  41. package/src/lib/persist-config.d.ts +9 -11
  42. package/src/lib/plugin-config.d.ts +2057 -6578
  43. package/src/lib/plugin-config.js +16 -11
  44. package/src/lib/plugin-config.js.map +1 -1
  45. package/src/lib/report.d.ts +1859 -2580
  46. package/src/lib/report.js +7 -17
  47. package/src/lib/report.js.map +1 -1
  48. package/src/lib/reports-diff.d.ts +105 -2641
  49. package/src/lib/reports-diff.js +4 -2
  50. package/src/lib/reports-diff.js.map +1 -1
  51. package/src/lib/runner-config.d.ts +223 -3393
  52. package/src/lib/runner-config.js +15 -16
  53. package/src/lib/runner-config.js.map +1 -1
  54. package/src/lib/source.d.ts +2 -28
  55. package/src/lib/source.js +4 -2
  56. package/src/lib/source.js.map +1 -1
  57. package/src/lib/table.d.ts +39 -57
  58. package/src/lib/table.js +18 -16
  59. package/src/lib/table.js.map +1 -1
  60. package/src/lib/tree.d.ts +17 -211
  61. package/src/lib/tree.js +13 -7
  62. package/src/lib/tree.js.map +1 -1
  63. package/src/lib/upload-config.d.ts +1 -13
  64. package/src/lib/upload-config.js +6 -5
  65. package/src/lib/upload-config.js.map +1 -1
@@ -1,15 +1,15 @@
1
1
  import { z } from 'zod';
2
2
  import { categoriesSchema } from './category-config.js';
3
- import { getMissingRefsForCategories, missingRefsForCategoriesErrorMsg, } from './implementation/utils.js';
3
+ import { createCheck } from './implementation/checks.js';
4
+ import { findMissingSlugsInCategoryRefs } from './implementation/utils.js';
4
5
  import { persistConfigSchema } from './persist-config.js';
5
6
  import { pluginConfigSchema } from './plugin-config.js';
6
7
  import { uploadConfigSchema } from './upload-config.js';
7
8
  export const unrefinedCoreConfigSchema = z.object({
8
9
  plugins: z
9
- .array(pluginConfigSchema, {
10
- description: 'List of plugins to be used (official, community-provided, or custom)',
11
- })
12
- .min(1),
10
+ .array(pluginConfigSchema)
11
+ .min(1)
12
+ .describe('List of plugins to be used (official, community-provided, or custom)'),
13
13
  /** portal configuration for persisting results */
14
14
  persist: persistConfigSchema.optional(),
15
15
  /** portal configuration for uploading results */
@@ -24,8 +24,6 @@ export const coreConfigSchema = refineCoreConfig(unrefinedCoreConfigSchema);
24
24
  */
25
25
  export function refineCoreConfig(schema) {
26
26
  // categories point to existing audit or group refs
27
- return schema.refine(({ categories, plugins }) => !getMissingRefsForCategories(categories, plugins), ({ categories, plugins }) => ({
28
- message: missingRefsForCategoriesErrorMsg(categories, plugins),
29
- }));
27
+ return schema.check(createCheck(findMissingSlugsInCategoryRefs));
30
28
  }
31
29
  //# sourceMappingURL=core-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"core-config.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/core-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,kBAAkB,EAAE;QACzB,WAAW,EACT,sEAAsE;KACzE,CAAC;SACD,GAAG,CAAC,CAAC,CAAC;IACT,kDAAkD;IAClD,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE;IACvC,iDAAiD;IACjD,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IACrC,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;AAE5E;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAwC;IACvE,mDAAmD;IACnD,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAC1B,CAAC,2BAA2B,CAAC,UAAU,EAAE,OAAO,CAAC,EACnD,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5B,OAAO,EAAE,gCAAgC,CAAC,UAAU,EAAE,OAAO,CAAC;KAC/D,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"core-config.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/core-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,kBAAkB,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,sEAAsE,CACvE;IACH,kDAAkD;IAClD,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE;IACvC,iDAAiD;IACjD,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IACrC,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;AAE5E;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAwC;IACvE,mDAAmD;IACnD,OAAO,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC,CAAC;AACnE,CAAC"}
@@ -2,13 +2,7 @@ import { z } from 'zod';
2
2
  export declare const groupRefSchema: z.ZodObject<{
3
3
  slug: z.ZodString;
4
4
  weight: z.ZodNumber;
5
- }, "strip", z.ZodTypeAny, {
6
- slug: string;
7
- weight: number;
8
- }, {
9
- slug: string;
10
- weight: number;
11
- }>;
5
+ }, z.core.$strip>;
12
6
  /**
13
7
  * Type Definition: `GroupRef`
14
8
  *
@@ -23,17 +17,7 @@ export declare const groupMetaSchema: z.ZodObject<{
23
17
  description: z.ZodOptional<z.ZodString>;
24
18
  docsUrl: z.ZodCatch<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>>;
25
19
  isSkipped: z.ZodOptional<z.ZodBoolean>;
26
- }, "strip", z.ZodTypeAny, {
27
- title: string;
28
- description?: string | undefined;
29
- docsUrl?: string | undefined;
30
- isSkipped?: boolean | undefined;
31
- }, {
32
- title: string;
33
- description?: string | undefined;
34
- docsUrl?: unknown;
35
- isSkipped?: boolean | undefined;
36
- }>;
20
+ }, z.core.$strip>;
37
21
  /**
38
22
  * Type Definition: `GroupMeta`
39
23
  *
@@ -43,56 +27,17 @@ export declare const groupMetaSchema: z.ZodObject<{
43
27
  * @see {@link https://github.com/code-pushup/cli/blob/main/packages/models/docs/models-reference.md#groupmeta}
44
28
  */
45
29
  export type GroupMeta = z.infer<typeof groupMetaSchema>;
46
- export declare const groupSchema: z.ZodObject<z.objectUtil.extendShape<{
30
+ export declare const groupSchema: z.ZodObject<{
47
31
  slug: z.ZodString;
48
- refs: z.ZodEffects<z.ZodEffects<z.ZodArray<z.ZodObject<{
32
+ refs: z.ZodArray<z.ZodObject<{
49
33
  slug: z.ZodString;
50
34
  weight: z.ZodNumber;
51
- }, "strip", z.ZodTypeAny, {
52
- slug: string;
53
- weight: number;
54
- }, {
55
- slug: string;
56
- weight: number;
57
- }>, "many">, {
58
- slug: string;
59
- weight: number;
60
- }[], {
61
- slug: string;
62
- weight: number;
63
- }[]>, {
64
- slug: string;
65
- weight: number;
66
- }[], {
67
- slug: string;
68
- weight: number;
69
- }[]>;
70
- }, {
35
+ }, z.core.$strip>>;
71
36
  title: z.ZodString;
72
37
  description: z.ZodOptional<z.ZodString>;
73
38
  docsUrl: z.ZodCatch<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>>;
74
39
  isSkipped: z.ZodOptional<z.ZodBoolean>;
75
- }>, "strip", z.ZodTypeAny, {
76
- slug: string;
77
- refs: {
78
- slug: string;
79
- weight: number;
80
- }[];
81
- title: string;
82
- description?: string | undefined;
83
- docsUrl?: string | undefined;
84
- isSkipped?: boolean | undefined;
85
- }, {
86
- slug: string;
87
- refs: {
88
- slug: string;
89
- weight: number;
90
- }[];
91
- title: string;
92
- description?: string | undefined;
93
- docsUrl?: unknown;
94
- isSkipped?: boolean | undefined;
95
- }>;
40
+ }, z.core.$strip>;
96
41
  /**
97
42
  * Type Definition: `Group`
98
43
  *
@@ -102,73 +47,14 @@ export declare const groupSchema: z.ZodObject<z.objectUtil.extendShape<{
102
47
  * @see {@link https://github.com/code-pushup/cli/blob/main/packages/models/docs/models-reference.md#group}
103
48
  */
104
49
  export type Group = z.infer<typeof groupSchema>;
105
- export declare const groupsSchema: z.ZodEffects<z.ZodOptional<z.ZodArray<z.ZodObject<z.objectUtil.extendShape<{
50
+ export declare const groupsSchema: z.ZodOptional<z.ZodArray<z.ZodObject<{
106
51
  slug: z.ZodString;
107
- refs: z.ZodEffects<z.ZodEffects<z.ZodArray<z.ZodObject<{
52
+ refs: z.ZodArray<z.ZodObject<{
108
53
  slug: z.ZodString;
109
54
  weight: z.ZodNumber;
110
- }, "strip", z.ZodTypeAny, {
111
- slug: string;
112
- weight: number;
113
- }, {
114
- slug: string;
115
- weight: number;
116
- }>, "many">, {
117
- slug: string;
118
- weight: number;
119
- }[], {
120
- slug: string;
121
- weight: number;
122
- }[]>, {
123
- slug: string;
124
- weight: number;
125
- }[], {
126
- slug: string;
127
- weight: number;
128
- }[]>;
129
- }, {
55
+ }, z.core.$strip>>;
130
56
  title: z.ZodString;
131
57
  description: z.ZodOptional<z.ZodString>;
132
58
  docsUrl: z.ZodCatch<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>>;
133
59
  isSkipped: z.ZodOptional<z.ZodBoolean>;
134
- }>, "strip", z.ZodTypeAny, {
135
- slug: string;
136
- refs: {
137
- slug: string;
138
- weight: number;
139
- }[];
140
- title: string;
141
- description?: string | undefined;
142
- docsUrl?: string | undefined;
143
- isSkipped?: boolean | undefined;
144
- }, {
145
- slug: string;
146
- refs: {
147
- slug: string;
148
- weight: number;
149
- }[];
150
- title: string;
151
- description?: string | undefined;
152
- docsUrl?: unknown;
153
- isSkipped?: boolean | undefined;
154
- }>, "many">>, {
155
- slug: string;
156
- refs: {
157
- slug: string;
158
- weight: number;
159
- }[];
160
- title: string;
161
- description?: string | undefined;
162
- docsUrl?: string | undefined;
163
- isSkipped?: boolean | undefined;
164
- }[] | undefined, {
165
- slug: string;
166
- refs: {
167
- slug: string;
168
- weight: number;
169
- }[];
170
- title: string;
171
- description?: string | undefined;
172
- docsUrl?: unknown;
173
- isSkipped?: boolean | undefined;
174
- }[] | undefined>;
60
+ }, z.core.$strip>>>;
package/src/lib/group.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod';
2
+ import { createDuplicateSlugsCheck, createDuplicatesCheck, } from './implementation/checks.js';
2
3
  import { metaSchema, scorableSchema, weightedRefSchema, } from './implementation/schemas.js';
3
- import { errorItems, exists, hasDuplicateStrings, } from './implementation/utils.js';
4
+ import { formatSlugsList } from './implementation/utils.js';
4
5
  export const groupRefSchema = weightedRefSchema('Weighted reference to a group', "Reference slug to a group within this plugin (e.g. 'max-lines')");
5
6
  export const groupMetaSchema = metaSchema({
6
7
  titleDescription: 'Descriptive name for the group',
@@ -10,32 +11,10 @@ export const groupMetaSchema = metaSchema({
10
11
  isSkippedDescription: 'Indicates whether the group is skipped',
11
12
  });
12
13
  export const groupSchema = scorableSchema('A group aggregates a set of audits into a single score which can be referenced from a category. ' +
13
- 'E.g. the group slug "performance" groups audits and can be referenced in a category', groupRefSchema, getDuplicateRefsInGroups, duplicateRefsInGroupsErrorMsg).merge(groupMetaSchema);
14
+ 'E.g. the group slug "performance" groups audits and can be referenced in a category', groupRefSchema, createDuplicatesCheck(({ slug }) => slug, duplicates => `Group has duplicate references to audits: ${formatSlugsList(duplicates)}`)).merge(groupMetaSchema);
14
15
  export const groupsSchema = z
15
- .array(groupSchema, {
16
- description: 'List of groups',
17
- })
16
+ .array(groupSchema)
17
+ .check(createDuplicateSlugsCheck('Group'))
18
18
  .optional()
19
- .refine(groups => !getDuplicateSlugsInGroups(groups), groups => ({
20
- message: duplicateSlugsInGroupsErrorMsg(groups),
21
- }));
22
- // ============
23
- // helper for validator: group refs are unique
24
- function duplicateRefsInGroupsErrorMsg(groups) {
25
- const duplicateRefs = getDuplicateRefsInGroups(groups);
26
- return `In plugin groups the following references are not unique: ${errorItems(duplicateRefs)}`;
27
- }
28
- function getDuplicateRefsInGroups(groups) {
29
- return hasDuplicateStrings(groups.map(({ slug: ref }) => ref).filter(exists));
30
- }
31
- // helper for validator: group refs are unique
32
- function duplicateSlugsInGroupsErrorMsg(groups) {
33
- const duplicateRefs = getDuplicateSlugsInGroups(groups);
34
- return `In groups the following slugs are not unique: ${errorItems(duplicateRefs)}`;
35
- }
36
- function getDuplicateSlugsInGroups(groups) {
37
- return Array.isArray(groups)
38
- ? hasDuplicateStrings(groups.map(({ slug }) => slug))
39
- : false;
40
- }
19
+ .describe('List of groups');
41
20
  //# sourceMappingURL=group.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"group.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,UAAU,EACV,cAAc,EACd,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,UAAU,EACV,MAAM,EACN,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAC7C,+BAA+B,EAC/B,iEAAiE,CAClE,CAAC;AAGF,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;IACxC,gBAAgB,EAAE,gCAAgC;IAClD,sBAAsB,EAAE,qCAAqC;IAC7D,kBAAkB,EAAE,0BAA0B;IAC9C,WAAW,EAAE,gBAAgB;IAC7B,oBAAoB,EAAE,wCAAwC;CAC/D,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,WAAW,GAAG,cAAc,CACvC,kGAAkG;IAChG,qFAAqF,EACvF,cAAc,EACd,wBAAwB,EACxB,6BAA6B,CAC9B,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAIzB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,KAAK,CAAC,WAAW,EAAE;IAClB,WAAW,EAAE,gBAAgB;CAC9B,CAAC;KACD,QAAQ,EAAE;KACV,MAAM,CACL,MAAM,CAAC,EAAE,CAAC,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAC5C,MAAM,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,EAAE,8BAA8B,CAAC,MAAM,CAAC;CAChD,CAAC,CACH,CAAC;AAEJ,eAAe;AAEf,8CAA8C;AAC9C,SAAS,6BAA6B,CAAC,MAAqB;IAC1D,MAAM,aAAa,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACvD,OAAO,6DAA6D,UAAU,CAC5E,aAAa,CACd,EAAE,CAAC;AACN,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAqB;IACrD,OAAO,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,8CAA8C;AAC9C,SAAS,8BAA8B,CAAC,MAA2B;IACjE,MAAM,aAAa,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,iDAAiD,UAAU,CAChE,aAAa,CACd,EAAE,CAAC;AACN,CAAC;AAED,SAAS,yBAAyB,CAAC,MAA2B;IAC5D,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1B,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"group.js","sourceRoot":"","sources":["../../../../../packages/models/src/lib/group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,UAAU,EACV,cAAc,EACd,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAC7C,+BAA+B,EAC/B,iEAAiE,CAClE,CAAC;AAGF,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;IACxC,gBAAgB,EAAE,gCAAgC;IAClD,sBAAsB,EAAE,qCAAqC;IAC7D,kBAAkB,EAAE,0BAA0B;IAC9C,WAAW,EAAE,gBAAgB;IAC7B,oBAAoB,EAAE,wCAAwC;CAC/D,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,WAAW,GAAG,cAAc,CACvC,kGAAkG;IAChG,qFAAqF,EACvF,cAAc,EACd,qBAAqB,CACnB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,EAClB,UAAU,CAAC,EAAE,CACX,6CAA6C,eAAe,CAAC,UAAU,CAAC,EAAE,CAC7E,CACF,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAIzB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,KAAK,CAAC,WAAW,CAAC;KAClB,KAAK,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;KACzC,QAAQ,EAAE;KACV,QAAQ,CAAC,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { z } from 'zod';
2
+ export declare function createCheck<T>(findErrorFn: (value: T) => false | {
3
+ message: string;
4
+ }): z.core.CheckFn<T>;
5
+ export declare function createDuplicatesCheck<T>(keyFn: (item: T) => string, errorMsgFn: (duplicates: string[]) => string): z.core.CheckFn<T[]>;
6
+ export declare function createDuplicateSlugsCheck<T extends {
7
+ slug: string;
8
+ }>(name: 'Audit' | 'Plugin' | 'Category' | 'Group'): z.core.CheckFn<T[]>;
@@ -0,0 +1,28 @@
1
+ import { hasDuplicateStrings } from './utils.js';
2
+ export function createCheck(findErrorFn) {
3
+ return ctx => {
4
+ const error = findErrorFn(ctx.value);
5
+ if (error) {
6
+ // eslint-disable-next-line functional/immutable-data, no-param-reassign
7
+ ctx.issues = [
8
+ ...ctx.issues,
9
+ {
10
+ code: 'custom',
11
+ message: error.message,
12
+ input: ctx.value,
13
+ },
14
+ ];
15
+ }
16
+ };
17
+ }
18
+ export function createDuplicatesCheck(keyFn, errorMsgFn) {
19
+ return createCheck(items => {
20
+ const keys = items.map(keyFn);
21
+ const duplicates = hasDuplicateStrings(keys);
22
+ return duplicates && { message: errorMsgFn(duplicates) };
23
+ });
24
+ }
25
+ export function createDuplicateSlugsCheck(name) {
26
+ return createDuplicatesCheck(({ slug }) => slug, duplicates => `${name} slugs must be unique, but received duplicates: ${duplicates.map(slug => JSON.stringify(slug)).join(', ')}`);
27
+ }
28
+ //# sourceMappingURL=checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../../../../packages/models/src/lib/implementation/checks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,UAAU,WAAW,CACzB,WAAsD;IAEtD,OAAO,GAAG,CAAC,EAAE;QACX,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,KAAK,EAAE,CAAC;YACV,wEAAwE;YACxE,GAAG,CAAC,MAAM,GAAG;gBACX,GAAG,GAAG,CAAC,MAAM;gBACb;oBACE,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,KAAK,EAAE,GAAG,CAAC,KAAK;iBACjB;aACF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAA0B,EAC1B,UAA4C;IAE5C,OAAO,WAAW,CAAC,KAAK,CAAC,EAAE;QACzB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,UAAU,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,IAA+C;IAE/C,OAAO,qBAAqB,CAC1B,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,EAClB,UAAU,CAAC,EAAE,CACX,GAAG,IAAI,mDAAmD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { z } from 'zod/v4';
2
+ import type { $ZodFunction } from 'zod/v4/core';
3
+ /**
4
+ * Converts Zod v4 function factory (returned by `z.function`) to Zod schema.
5
+ *
6
+ * Supports asynchronous functions. For synchronous functions, you can use {@link convertSyncZodFunctionToSchema}.
7
+ *
8
+ * @param factory `z.function({ input: [...], output: ... })`
9
+ * @returns Zod schema with compile-time and runtime validations.
10
+ */
11
+ export declare function convertAsyncZodFunctionToSchema<T extends $ZodFunction>(factory: T): z.ZodPipe<z.ZodCustom<unknown, unknown>, z.ZodTransform<Awaited<Parameters<T["implementAsync"]>[0] extends infer T_1 ? T_1 extends Parameters<T["implementAsync"]>[0] ? T_1 extends z.core.$InferOuterFunctionTypeAsync<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut> ? T_1 : z.core.$InferOuterFunctionTypeAsync<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut> : never : never>, unknown>>;
12
+ /**
13
+ * Converts Zod v4 function factory (returned by `z.function`) to Zod schema.
14
+ *
15
+ * **IMPORTANT!** Use for synchronous functions only. For asynchronous functions use {@link convertAsyncZodFunctionToSchema}.
16
+ *
17
+ * @throws `Encountered Promise during synchronous parse. Use .parseAsync() instead.` if used with async functions.
18
+ *
19
+ * @param factory `z.function({ input: [...], output: ... })`
20
+ * @returns Zod schema with compile-time and runtime validations.
21
+ */
22
+ export declare function convertSyncZodFunctionToSchema<T extends $ZodFunction>(factory: T): z.ZodPipe<z.ZodCustom<unknown, unknown>, z.ZodTransform<(...args: Parameters<T["_output"]>) => ReturnType<Parameters<T["implement"]>[0]> extends ReturnType<T["_output"]> ? ReturnType<Parameters<T["implement"]>[0]> : ReturnType<T["_output"]>, unknown>>;
@@ -0,0 +1,53 @@
1
+ import { z } from 'zod/v4';
2
+ // https://zod.dev/v4/changelog?id=zfunction
3
+ // https://github.com/colinhacks/zod/issues/4143#issuecomment-2931729793
4
+ // https://github.com/matejchalk/zod2md?tab=readme-ov-file#function-schemas
5
+ /**
6
+ * Converts Zod v4 function factory (returned by `z.function`) to Zod schema.
7
+ *
8
+ * Supports asynchronous functions. For synchronous functions, you can use {@link convertSyncZodFunctionToSchema}.
9
+ *
10
+ * @param factory `z.function({ input: [...], output: ... })`
11
+ * @returns Zod schema with compile-time and runtime validations.
12
+ */
13
+ export function convertAsyncZodFunctionToSchema(factory) {
14
+ return z
15
+ .custom()
16
+ .transform((arg, ctx) => {
17
+ if (typeof arg !== 'function') {
18
+ ctx.addIssue(`Expected function, received ${typeof arg}`);
19
+ return z.NEVER;
20
+ }
21
+ return factory.implementAsync(arg);
22
+ })
23
+ .meta({
24
+ // enables zod2md to include function signature in docs
25
+ $ZodFunction: factory,
26
+ });
27
+ }
28
+ /**
29
+ * Converts Zod v4 function factory (returned by `z.function`) to Zod schema.
30
+ *
31
+ * **IMPORTANT!** Use for synchronous functions only. For asynchronous functions use {@link convertAsyncZodFunctionToSchema}.
32
+ *
33
+ * @throws `Encountered Promise during synchronous parse. Use .parseAsync() instead.` if used with async functions.
34
+ *
35
+ * @param factory `z.function({ input: [...], output: ... })`
36
+ * @returns Zod schema with compile-time and runtime validations.
37
+ */
38
+ export function convertSyncZodFunctionToSchema(factory) {
39
+ return z
40
+ .custom()
41
+ .transform((arg, ctx) => {
42
+ if (typeof arg !== 'function') {
43
+ ctx.addIssue(`Expected function, received ${typeof arg}`);
44
+ return z.NEVER;
45
+ }
46
+ return factory.implement(arg);
47
+ })
48
+ .meta({
49
+ // enables zod2md to include function signature in docs
50
+ $ZodFunction: factory,
51
+ });
52
+ }
53
+ //# sourceMappingURL=function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function.js","sourceRoot":"","sources":["../../../../../../packages/models/src/lib/implementation/function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,4CAA4C;AAC5C,wEAAwE;AACxE,2EAA2E;AAE3E;;;;;;;GAOG;AACH,MAAM,UAAU,+BAA+B,CAC7C,OAAU;IAEV,OAAO,CAAC;SACL,MAAM,EAAE;SACR,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,GAAG,CAAC,QAAQ,CAAC,+BAA+B,OAAO,GAAG,EAAE,CAAC,CAAC;YAC1D,OAAO,CAAC,CAAC,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,OAAO,CAAC,cAAc,CAAC,GAAyC,CAAC,CAAC;IAC3E,CAAC,CAAC;SACD,IAAI,CAAC;QACJ,uDAAuD;QACvD,YAAY,EAAE,OAAO;KACtB,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAAU;IAEV,OAAO,CAAC;SACL,MAAM,EAAE;SACR,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,GAAG,CAAC,QAAQ,CAAC,+BAA+B,OAAO,GAAG,EAAE,CAAC,CAAC;YAC1D,OAAO,CAAC,CAAC,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,OAAO,CAAC,SAAS,CAAC,GAAoC,CAAC,CAAC;IACjE,CAAC,CAAC;SACD,IAAI,CAAC;QACJ,uDAAuD;QACvD,YAAY,EAAE,OAAO;KACtB,CAAC,CAAC;AACP,CAAC"}