@builder-builder/builder 0.0.7 → 0.0.9

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 (220) hide show
  1. package/dist/check.d.ts +2 -1
  2. package/dist/check.js +6 -2
  3. package/dist/entities/builder/builder.d.ts +494 -0
  4. package/dist/entities/builder/builder.js +84 -0
  5. package/dist/entities/builder/builders.d.ts +20 -0
  6. package/dist/entities/builder/builders.js +18 -0
  7. package/dist/entities/builder/expectation.d.ts +12 -0
  8. package/dist/entities/builder/index.d.ts +7 -0
  9. package/dist/entities/builder/index.js +3 -0
  10. package/dist/entities/builder/methods.d.ts +58 -0
  11. package/dist/entities/builder/methods.js +30 -0
  12. package/dist/entities/builder/parameter.d.ts +62 -0
  13. package/dist/entities/builder/parameter.js +18 -0
  14. package/dist/entities/builder/state.d.ts +26 -0
  15. package/dist/entities/builder/validate.d.ts +3 -0
  16. package/dist/entities/builder/validate.js +108 -0
  17. package/dist/entities/collection/collection.d.ts +37 -0
  18. package/dist/entities/collection/collection.js +42 -0
  19. package/dist/entities/collection/config.d.ts +1094 -0
  20. package/dist/entities/collection/config.js +23 -0
  21. package/dist/entities/collection/expectation.d.ts +7 -0
  22. package/dist/entities/collection/expectation.js +4 -0
  23. package/dist/entities/collection/index.d.ts +8 -0
  24. package/dist/entities/collection/index.js +4 -0
  25. package/dist/entities/collection/when.d.ts +9 -0
  26. package/dist/entities/collection/when.js +2 -0
  27. package/dist/entities/component/component.d.ts +403 -0
  28. package/dist/entities/component/component.js +24 -0
  29. package/dist/entities/component/details.d.ts +82 -0
  30. package/dist/entities/component/details.js +17 -0
  31. package/dist/entities/component/expectation.d.ts +8 -0
  32. package/dist/entities/component/expectation.js +7 -0
  33. package/dist/entities/component/index.d.ts +8 -0
  34. package/dist/entities/component/index.js +4 -0
  35. package/dist/entities/component/when.d.ts +11 -0
  36. package/dist/entities/component/when.js +20 -0
  37. package/dist/entities/errors.d.ts +21 -0
  38. package/dist/entities/expectation.d.ts +44 -0
  39. package/dist/entities/expectation.js +23 -0
  40. package/dist/entities/index.d.ts +18 -0
  41. package/dist/entities/index.js +9 -0
  42. package/dist/entities/option/expectation.d.ts +2 -0
  43. package/dist/entities/option/expectation.js +4 -0
  44. package/dist/entities/option/index.d.ts +11 -0
  45. package/dist/entities/option/index.js +6 -0
  46. package/dist/entities/option/option.d.ts +347 -0
  47. package/dist/entities/option/option.js +24 -0
  48. package/dist/entities/option/select.d.ts +49 -0
  49. package/dist/entities/option/select.js +40 -0
  50. package/dist/entities/option/toggle.d.ts +39 -0
  51. package/dist/entities/option/toggle.js +42 -0
  52. package/dist/entities/option/values.d.ts +63 -0
  53. package/dist/entities/option/values.js +8 -0
  54. package/dist/entities/option/when.d.ts +9 -0
  55. package/dist/entities/option/when.js +2 -0
  56. package/dist/entities/serialise.d.ts +3801 -0
  57. package/dist/entities/serialise.js +41 -0
  58. package/dist/entities/ui/describe.d.ts +100 -0
  59. package/dist/entities/ui/describe.js +22 -0
  60. package/dist/entities/ui/index.d.ts +14 -0
  61. package/dist/entities/ui/index.js +7 -0
  62. package/dist/entities/ui/label.d.ts +18 -0
  63. package/dist/entities/ui/label.js +12 -0
  64. package/dist/entities/ui/page.d.ts +96 -0
  65. package/dist/entities/ui/page.js +20 -0
  66. package/dist/entities/ui/pages.d.ts +431 -0
  67. package/dist/entities/ui/pages.js +29 -0
  68. package/dist/entities/ui/parameter.d.ts +7 -0
  69. package/dist/entities/ui/parameter.js +29 -0
  70. package/dist/entities/ui/ui.d.ts +1582 -0
  71. package/dist/entities/ui/ui.js +53 -0
  72. package/dist/entities/ui/uis.d.ts +10 -0
  73. package/dist/entities/ui/uis.js +20 -0
  74. package/dist/entities/ui/validate.d.ts +8 -0
  75. package/dist/entities/ui/validate.js +21 -0
  76. package/dist/entities/validate.d.ts +28 -0
  77. package/dist/entities/validate.js +1 -0
  78. package/dist/entities/when.d.ts +176 -0
  79. package/dist/entities/when.js +47 -0
  80. package/dist/exception.d.ts +8 -0
  81. package/dist/exception.js +7 -0
  82. package/dist/index.d.ts +38 -13
  83. package/dist/index.js +23 -5
  84. package/dist/mappers/assert/builder.d.ts +2 -0
  85. package/dist/mappers/assert/builder.js +46 -0
  86. package/dist/mappers/assert/expectation.d.ts +2 -0
  87. package/dist/mappers/assert/expectation.js +23 -0
  88. package/dist/mappers/assert/index.d.ts +6 -0
  89. package/dist/mappers/assert/index.js +4 -0
  90. package/dist/mappers/assert/model.d.ts +13 -0
  91. package/dist/mappers/assert/model.js +47 -0
  92. package/dist/mappers/assert/models.d.ts +33 -0
  93. package/dist/mappers/assert/models.js +74 -0
  94. package/dist/mappers/assert/ui.d.ts +2 -0
  95. package/dist/mappers/assert/ui.js +22 -0
  96. package/dist/mappers/index.d.ts +7 -0
  97. package/dist/mappers/index.js +4 -0
  98. package/dist/mappers/instance/index.d.ts +1 -0
  99. package/dist/mappers/instance/index.js +1 -0
  100. package/dist/mappers/instance/instance.d.ts +4 -0
  101. package/dist/mappers/instance/instance.js +33 -0
  102. package/dist/mappers/models/component-graph.d.ts +9 -0
  103. package/dist/{core/component/graph.js → mappers/models/component-graph.js} +3 -3
  104. package/dist/{core → mappers/models}/graph.d.ts +4 -1
  105. package/dist/mappers/models/graph.js +17 -0
  106. package/dist/mappers/models/index.d.ts +1 -0
  107. package/dist/mappers/models/index.js +1 -0
  108. package/dist/mappers/models/models.d.ts +3 -0
  109. package/dist/mappers/models/models.js +37 -0
  110. package/dist/mappers/models/option-graph.d.ts +9 -0
  111. package/dist/mappers/models/option-graph.js +77 -0
  112. package/dist/mappers/order/index.d.ts +2 -0
  113. package/dist/mappers/order/index.js +1 -0
  114. package/dist/mappers/order/order.d.ts +14 -0
  115. package/dist/mappers/order/order.js +31 -0
  116. package/dist/mappers/render/index.d.ts +4 -0
  117. package/dist/mappers/render/index.js +2 -0
  118. package/dist/mappers/render/ordinal.d.ts +1 -0
  119. package/dist/mappers/render/ordinal.js +20 -0
  120. package/dist/mappers/render/pages.d.ts +15 -0
  121. package/dist/mappers/render/pages.js +1 -0
  122. package/dist/mappers/render/render.d.ts +8 -0
  123. package/dist/mappers/render/render.js +124 -0
  124. package/dist/mappers/resolve.d.ts +9 -0
  125. package/dist/mappers/resolve.js +57 -0
  126. package/dist/model.d.ts +8 -8
  127. package/dist/paths.d.ts +5 -16
  128. package/dist/paths.js +3 -0
  129. package/dist/primitive.d.ts +5 -0
  130. package/dist/{schemas/primitives.js → primitive.js} +0 -2
  131. package/dist/references.d.ts +60 -0
  132. package/dist/references.js +26 -0
  133. package/dist/serialisable.d.ts +10 -0
  134. package/dist/serialisable.js +5 -0
  135. package/dist/walker/index.d.ts +2 -0
  136. package/dist/walker/index.js +1 -0
  137. package/dist/walker/walkable.d.ts +4 -0
  138. package/dist/walker/walkable.js +4 -0
  139. package/dist/walker/walker.d.ts +18 -0
  140. package/dist/walker/walker.js +103 -0
  141. package/dist/walker/walkers.d.ts +8 -0
  142. package/dist/walker/walkers.js +51 -0
  143. package/package.json +8 -2
  144. package/dist/core/builder.d.ts +0 -74
  145. package/dist/core/builder.js +0 -109
  146. package/dist/core/collection/collection.d.ts +0 -32
  147. package/dist/core/collection/collection.js +0 -37
  148. package/dist/core/collection/index.d.ts +0 -4
  149. package/dist/core/collection/index.js +0 -2
  150. package/dist/core/collection/method.d.ts +0 -30
  151. package/dist/core/collection/method.js +0 -11
  152. package/dist/core/component/component.d.ts +0 -9
  153. package/dist/core/component/component.js +0 -10
  154. package/dist/core/component/graph.d.ts +0 -9
  155. package/dist/core/component/index.d.ts +0 -4
  156. package/dist/core/component/index.js +0 -2
  157. package/dist/core/component/method.d.ts +0 -11
  158. package/dist/core/expectation.d.ts +0 -42
  159. package/dist/core/expectation.js +0 -18
  160. package/dist/core/graph.js +0 -3
  161. package/dist/core/index.d.ts +0 -14
  162. package/dist/core/index.js +0 -7
  163. package/dist/core/option/graph.d.ts +0 -10
  164. package/dist/core/option/graph.js +0 -78
  165. package/dist/core/option/index.d.ts +0 -10
  166. package/dist/core/option/index.js +0 -5
  167. package/dist/core/option/method.d.ts +0 -70
  168. package/dist/core/option/method.js +0 -13
  169. package/dist/core/option/option.d.ts +0 -30
  170. package/dist/core/option/option.js +0 -42
  171. package/dist/core/option/select.d.ts +0 -22
  172. package/dist/core/option/select.js +0 -34
  173. package/dist/core/option/toggle.d.ts +0 -16
  174. package/dist/core/option/toggle.js +0 -29
  175. package/dist/core/parameter.d.ts +0 -48
  176. package/dist/core/parameter.js +0 -31
  177. package/dist/core/validate.d.ts +0 -26
  178. package/dist/core/validate.js +0 -43
  179. package/dist/core/when/config.d.ts +0 -20
  180. package/dist/core/when/config.js +0 -4
  181. package/dist/core/when/constrain.d.ts +0 -14
  182. package/dist/core/when/index.d.ts +0 -5
  183. package/dist/core/when/index.js +0 -2
  184. package/dist/core/when/nullability.d.ts +0 -18
  185. package/dist/core/when/resolve.d.ts +0 -18
  186. package/dist/core/when/resolve.js +0 -22
  187. package/dist/resolve/index.d.ts +0 -10
  188. package/dist/resolve/index.js +0 -5
  189. package/dist/resolve/instance.d.ts +0 -35
  190. package/dist/resolve/instance.js +0 -80
  191. package/dist/resolve/models.d.ts +0 -3
  192. package/dist/resolve/models.js +0 -20
  193. package/dist/resolve/order.d.ts +0 -21
  194. package/dist/resolve/order.js +0 -27
  195. package/dist/resolve/render.d.ts +0 -23
  196. package/dist/resolve/render.js +0 -171
  197. package/dist/resolve/validate.d.ts +0 -37
  198. package/dist/resolve/validate.js +0 -47
  199. package/dist/schemas/description.d.ts +0 -5
  200. package/dist/schemas/description.js +0 -3
  201. package/dist/schemas/index.d.ts +0 -6
  202. package/dist/schemas/index.js +0 -3
  203. package/dist/schemas/primitives.d.ts +0 -9
  204. package/dist/schemas/ui.d.ts +0 -96
  205. package/dist/schemas/ui.js +0 -23
  206. package/dist/serialise/deserialise.d.ts +0 -14
  207. package/dist/serialise/deserialise.js +0 -119
  208. package/dist/serialise/index.d.ts +0 -6
  209. package/dist/serialise/index.js +0 -4
  210. package/dist/serialise/schemas.d.ts +0 -1946
  211. package/dist/serialise/schemas.js +0 -150
  212. package/dist/serialise/serialise.d.ts +0 -13
  213. package/dist/serialise/serialise.js +0 -147
  214. package/dist/serialise/validate.d.ts +0 -26
  215. package/dist/serialise/validate.js +0 -148
  216. package/dist/ui.d.ts +0 -19
  217. package/dist/ui.js +0 -44
  218. /package/dist/{core/component/method.js → entities/builder/expectation.js} +0 -0
  219. /package/dist/{core/when/constrain.js → entities/builder/state.js} +0 -0
  220. /package/dist/{core/when/nullability.js → entities/errors.js} +0 -0
@@ -1,150 +0,0 @@
1
- import * as v from 'valibot';
2
- import { BuilderParameterSchema } from '../core/parameter.js';
3
- import { BuilderOptionValuesMapSchema, BuilderOptionValuesSchema } from '../core/option/option.js';
4
- import { BuilderPathSchema, BuilderPathsSchema, BuilderPrimitivesSchema } from '../schemas/primitives.js';
5
- export { BuilderOptionValuesMapSchema, BuilderOptionValuesSchema, BuilderParameterSchema };
6
- export const BuilderSelectTypeSerialisedSchema = v.pipe(v.object({
7
- type: v.literal('select'),
8
- options: v.pipe(v.tupleWithRest([v.string()], v.string()), v.readonly()),
9
- defaultValue: v.nullable(v.string()),
10
- optional: v.boolean(),
11
- labels: v.record(v.string(), v.string())
12
- }), v.readonly());
13
- export const BuilderToggleTypeSerialisedSchema = v.pipe(v.object({
14
- type: v.literal('toggle'),
15
- valueType: v.picklist(['string', 'boolean', 'number']),
16
- defaultValue: v.nullable(v.union([v.boolean(), v.string(), v.number()])),
17
- optional: v.boolean()
18
- }), v.readonly());
19
- export const BuilderParameterSerialisedSchema = v.pipe(v.object({ type: v.literal('parameter') }), v.readonly());
20
- export const BuilderValuesSerialisedSchema = v.pipe(v.variant('type', [BuilderSelectTypeSerialisedSchema, BuilderToggleTypeSerialisedSchema]), v.readonly());
21
- export const BuilderOptionEnableConfigSerialisedSchema = v.pipe(v.object({
22
- type: v.literal('enable'),
23
- values: v.union([BuilderValuesSerialisedSchema, BuilderParameterSerialisedSchema])
24
- }), v.readonly());
25
- export const BuilderOptionMatchConfigSerialisedSchema = v.pipe(v.object({
26
- type: v.literal('match'),
27
- matchPath: BuilderPathSchema,
28
- selectMap: v.union([
29
- v.record(v.string(), v.nullable(BuilderValuesSerialisedSchema)),
30
- BuilderParameterSerialisedSchema
31
- ])
32
- }), v.readonly());
33
- export const BuilderOptionUnlessConfigSerialisedSchema = v.pipe(v.object({
34
- type: v.literal('unless'),
35
- unlessPath: BuilderPathSchema,
36
- disabledValues: BuilderPrimitivesSchema,
37
- values: v.union([BuilderValuesSerialisedSchema, BuilderParameterSerialisedSchema])
38
- }), v.readonly());
39
- export const BuilderOptionWhenConfigSerialisedSchema = v.pipe(v.variant('type', [
40
- BuilderOptionEnableConfigSerialisedSchema,
41
- BuilderOptionMatchConfigSerialisedSchema,
42
- BuilderOptionUnlessConfigSerialisedSchema
43
- ]), v.readonly());
44
- export const BuilderOptionSerialisedSchema = v.pipe(v.object({
45
- name: v.string(),
46
- values: v.union([BuilderValuesSerialisedSchema, BuilderParameterSerialisedSchema]),
47
- gatePaths: BuilderPathsSchema,
48
- config: v.nullable(BuilderOptionWhenConfigSerialisedSchema)
49
- }), v.readonly());
50
- const BuilderDependenciesSerialisedSchema = v.pipe(v.array(v.string()), v.readonly());
51
- export const BuilderComponentSerialisedSchema = v.pipe(v.object({
52
- name: v.string(),
53
- paths: BuilderPathsSchema,
54
- dependencies: BuilderDependenciesSerialisedSchema
55
- }), v.readonly());
56
- const lazyBuilder = () => v.lazy(() => BuilderSerialisedSchema);
57
- const BuilderSerialisedCollectionConfigObject = v.object({
58
- builder: lazyBuilder(),
59
- min: v.number(),
60
- max: v.number()
61
- });
62
- const BuilderSerialisedCollectionEnableConfigObject = v.object({
63
- type: v.literal('enable'),
64
- builder: lazyBuilder(),
65
- min: v.number(),
66
- max: v.number()
67
- });
68
- const BuilderSerialisedCollectionMatchConfigObject = v.object({
69
- type: v.literal('match'),
70
- matchPath: BuilderPathSchema,
71
- selectMap: v.record(v.string(), v.nullable(BuilderSerialisedCollectionConfigObject))
72
- });
73
- const BuilderSerialisedCollectionUnlessConfigObject = v.object({
74
- type: v.literal('unless'),
75
- unlessPath: BuilderPathSchema,
76
- disabledValues: BuilderPrimitivesSchema,
77
- builder: lazyBuilder(),
78
- min: v.number(),
79
- max: v.number()
80
- });
81
- const BuilderSerialisedCollectionObject = v.object({
82
- name: v.string(),
83
- builder: lazyBuilder(),
84
- min: v.number(),
85
- max: v.number(),
86
- gatePaths: BuilderPathsSchema,
87
- config: v.nullable(v.variant('type', [
88
- BuilderSerialisedCollectionEnableConfigObject,
89
- BuilderSerialisedCollectionMatchConfigObject,
90
- BuilderSerialisedCollectionUnlessConfigObject
91
- ]))
92
- });
93
- const BuilderSerialisedUIPageObject = v.object({
94
- type: v.literal('page'),
95
- label: v.nullable(v.string()),
96
- paths: BuilderPathsSchema
97
- });
98
- const BuilderSerialisedUIDescribeObject = v.object({
99
- type: v.literal('describe'),
100
- label: v.nullable(v.string()),
101
- paths: BuilderPathsSchema
102
- });
103
- const lazySerialisedUIItems = () => v.lazy(() => BuilderUIItemsSerialisedSchema);
104
- const BuilderSerialisedUICollectionObject = v.object({
105
- type: v.literal('collection'),
106
- name: v.string(),
107
- label: v.string(),
108
- items: lazySerialisedUIItems()
109
- });
110
- export const BuilderCollectionConfigSerialisedSchema = v.pipe(BuilderSerialisedCollectionConfigObject, v.readonly());
111
- export const BuilderCollectionEnableConfigSerialisedSchema = v.pipe(BuilderSerialisedCollectionEnableConfigObject, v.readonly());
112
- export const BuilderCollectionMatchConfigSerialisedSchema = v.pipe(BuilderSerialisedCollectionMatchConfigObject, v.readonly());
113
- export const BuilderCollectionUnlessConfigSerialisedSchema = v.pipe(BuilderSerialisedCollectionUnlessConfigObject, v.readonly());
114
- export const BuilderCollectionWhenConfigSerialisedSchema = v.pipe(v.variant('type', [
115
- BuilderSerialisedCollectionEnableConfigObject,
116
- BuilderSerialisedCollectionMatchConfigObject,
117
- BuilderSerialisedCollectionUnlessConfigObject
118
- ]), v.readonly());
119
- export const BuilderCollectionSerialisedSchema = v.pipe(BuilderSerialisedCollectionObject, v.readonly());
120
- export const BuilderExpectationSerialisedSchema = v.pipe(v.object({
121
- name: v.string(),
122
- kind: v.picklist(['option', 'component', 'collection'])
123
- }), v.readonly());
124
- const BuilderOptionsSerialisedSchema = v.pipe(v.array(BuilderOptionSerialisedSchema), v.readonly());
125
- const BuilderComponentsSerialisedSchema = v.pipe(v.array(BuilderComponentSerialisedSchema), v.readonly());
126
- const BuilderCollectionsSerialisedSchema = v.pipe(v.array(BuilderSerialisedCollectionObject), v.readonly());
127
- const BuilderExpectationsSerialisedSchema = v.pipe(v.array(BuilderExpectationSerialisedSchema), v.readonly());
128
- export const BuilderSerialisedSchema = v.pipe(v.object({
129
- options: BuilderOptionsSerialisedSchema,
130
- components: BuilderComponentsSerialisedSchema,
131
- collections: BuilderCollectionsSerialisedSchema,
132
- expectations: BuilderExpectationsSerialisedSchema
133
- }), v.readonly());
134
- export const BuilderUIPageSerialisedSchema = v.pipe(BuilderSerialisedUIPageObject, v.readonly());
135
- export const BuilderUIDescribeSerialisedSchema = v.pipe(BuilderSerialisedUIDescribeObject, v.readonly());
136
- export const BuilderUICollectionSerialisedSchema = v.pipe(BuilderSerialisedUICollectionObject, v.readonly());
137
- export const BuilderUIItemSerialisedSchema = v.pipe(v.variant('type', [
138
- BuilderSerialisedUIPageObject,
139
- BuilderSerialisedUIDescribeObject,
140
- BuilderSerialisedUICollectionObject
141
- ]), v.readonly());
142
- export const BuilderUIItemsSerialisedSchema = v.pipe(v.array(v.variant('type', [
143
- BuilderSerialisedUIPageObject,
144
- BuilderSerialisedUIDescribeObject,
145
- BuilderSerialisedUICollectionObject
146
- ])), v.readonly());
147
- export const BuilderUISerialisedSchema = v.pipe(v.object({
148
- items: BuilderUIItemsSerialisedSchema,
149
- expectations: BuilderExpectationsSerialisedSchema
150
- }), v.readonly());
@@ -1,13 +0,0 @@
1
- import type { BuilderGeneric } from '../core/index';
2
- import type { BuilderSelectTypeSerialised, BuilderSerialised, BuilderUISerialised } from './schemas';
3
- import type { BuilderUIGeneric } from '../ui';
4
- import { BuilderSelectType } from '../core/index.js';
5
- export declare const serialise: {
6
- builder: typeof serialiseBuilder;
7
- select: typeof serialiseSelect;
8
- ui: typeof serialiseUI;
9
- };
10
- declare function serialiseBuilder(builder: BuilderGeneric): BuilderSerialised;
11
- declare function serialiseUI(input: BuilderUIGeneric): BuilderUISerialised;
12
- declare function serialiseSelect(selectType: BuilderSelectType): BuilderSelectTypeSerialised;
13
- export {};
@@ -1,147 +0,0 @@
1
- import * as v from 'valibot';
2
- import { BuilderCollection, BuilderComponent, BuilderOption, BuilderParameter, BuilderParameterSchema, BuilderSelectType } from '../core/index.js';
3
- export const serialise = {
4
- builder: serialiseBuilder,
5
- select: serialiseSelect,
6
- ui: serialiseUI
7
- };
8
- function serialiseBuilder(builder) {
9
- return {
10
- options: builder.options.map(serialiseOption),
11
- components: builder.components.map(serialiseComponent),
12
- collections: builder.collections.map(serialiseCollection),
13
- expectations: builder.expectations.map(serialiseExpectation)
14
- };
15
- }
16
- function serialiseUI(input) {
17
- return {
18
- items: input.items,
19
- expectations: input.expectations.map(serialiseExpectation)
20
- };
21
- }
22
- function serialiseOption(option) {
23
- return {
24
- name: option.name,
25
- values: serialiseValues(option.values),
26
- gatePaths: option.gatePaths,
27
- config: serialiseOptionWhenConfig(option.config)
28
- };
29
- }
30
- function serialiseComponent(component) {
31
- return {
32
- name: component.name,
33
- paths: component.paths,
34
- dependencies: component.dependencies
35
- };
36
- }
37
- function serialiseExpectation(expectation) {
38
- return {
39
- name: expectation.name,
40
- kind: expectation.kind
41
- };
42
- }
43
- function serialiseCollection(collection) {
44
- return {
45
- name: collection.name,
46
- builder: serialiseBuilder(collection.builder),
47
- min: collection.min,
48
- max: collection.max,
49
- gatePaths: collection.gatePaths,
50
- config: serialiseCollectionWhenConfig(collection.config)
51
- };
52
- }
53
- function serialiseSelect(selectType) {
54
- return {
55
- type: 'select',
56
- options: selectType.options,
57
- defaultValue: selectType.defaultValue,
58
- optional: selectType.isOptional,
59
- labels: selectType.optionLabels
60
- };
61
- }
62
- function serialiseValues(optionValues) {
63
- if (v.is(BuilderParameterSchema, optionValues)) {
64
- return { type: 'parameter' };
65
- }
66
- if (v.is(v.instance(BuilderSelectType), optionValues)) {
67
- return serialiseSelect(optionValues);
68
- }
69
- return {
70
- type: 'toggle',
71
- valueType: optionValues.valueType,
72
- defaultValue: optionValues.defaultValue,
73
- optional: optionValues.isOptional
74
- };
75
- }
76
- function serialiseOptionWhenConfig(config) {
77
- if (config === null) {
78
- return null;
79
- }
80
- switch (config.type) {
81
- case 'enable': {
82
- return { type: 'enable', values: serialiseValues(config.values) };
83
- }
84
- case 'match': {
85
- if (v.is(BuilderParameterSchema, config.selectMap)) {
86
- return {
87
- type: 'match',
88
- matchPath: config.matchPath,
89
- selectMap: { type: 'parameter' }
90
- };
91
- }
92
- return {
93
- type: 'match',
94
- matchPath: config.matchPath,
95
- selectMap: Object.fromEntries(Object.entries(config.selectMap).map(([key, value]) => [
96
- key,
97
- value ? serialiseValues(value) : null
98
- ]))
99
- };
100
- }
101
- case 'unless': {
102
- return {
103
- type: 'unless',
104
- unlessPath: config.unlessPath,
105
- disabledValues: config.disabledValues,
106
- values: serialiseValues(config.values)
107
- };
108
- }
109
- }
110
- }
111
- function serialiseCollectionWhenConfig(config) {
112
- if (config === null) {
113
- return null;
114
- }
115
- switch (config.type) {
116
- case 'enable': {
117
- return {
118
- type: 'enable',
119
- builder: serialiseBuilder(config.builder),
120
- min: config.min,
121
- max: config.max
122
- };
123
- }
124
- case 'match': {
125
- return {
126
- type: 'match',
127
- matchPath: config.matchPath,
128
- selectMap: Object.fromEntries(Object.entries(config.selectMap).map(([key, value]) => [
129
- key,
130
- value
131
- ? { builder: serialiseBuilder(value.builder), min: value.min, max: value.max }
132
- : null
133
- ]))
134
- };
135
- }
136
- case 'unless': {
137
- return {
138
- type: 'unless',
139
- unlessPath: config.unlessPath,
140
- disabledValues: config.disabledValues,
141
- builder: serialiseBuilder(config.builder),
142
- min: config.min,
143
- max: config.max
144
- };
145
- }
146
- }
147
- }
@@ -1,26 +0,0 @@
1
- import type { BuilderSerialised } from './schemas';
2
- declare const validated: unique symbol;
3
- export type BuilderSerialisedValidated = BuilderSerialised & {
4
- readonly [validated]: true;
5
- };
6
- export type BuilderSerialisedErrorKind = 'duplicate-option' | 'duplicate-component' | 'duplicate-collection' | 'invalid-gate-path' | 'invalid-component-path' | 'invalid-component-dependency' | 'invalid-config-path';
7
- export type BuilderSerialisedError = {
8
- readonly kind: BuilderSerialisedErrorKind;
9
- readonly name: string;
10
- readonly detail: string;
11
- };
12
- export type BuilderSerialisedErrors = ReadonlyArray<BuilderSerialisedError>;
13
- export type BuilderSerialisedValidateResult = readonly [
14
- BuilderSerialisedValidated,
15
- BuilderSerialisedErrors
16
- ];
17
- export type BuilderSerialisedValidateOptions = {
18
- readonly strict: true;
19
- };
20
- export declare class BuilderSerialisedValidateError extends Error {
21
- readonly errors: BuilderSerialisedErrors;
22
- constructor(errors: BuilderSerialisedErrors);
23
- }
24
- export declare const validate: typeof validateSerialised;
25
- declare function validateSerialised(data: unknown, options?: BuilderSerialisedValidateOptions): BuilderSerialisedValidateResult;
26
- export {};
@@ -1,148 +0,0 @@
1
- import * as v from 'valibot';
2
- import { BuilderSerialisedSchema } from './schemas.js';
3
- export class BuilderSerialisedValidateError extends Error {
4
- errors;
5
- constructor(errors) {
6
- super('serialised validation failed');
7
- this.errors = errors;
8
- }
9
- }
10
- export const validate = validateSerialised;
11
- function validateSerialised(data, options) {
12
- const serialised = v.parse(BuilderSerialisedSchema, data);
13
- let errors = [];
14
- const optionNames = new Set();
15
- const componentNames = new Set();
16
- const collectionNames = new Set();
17
- const optionExpectationNames = new Set(serialised.expectations
18
- .filter((expectation) => expectation.kind === 'option')
19
- .map((expectation) => expectation.name));
20
- const componentExpectationNames = new Set(serialised.expectations
21
- .filter((expectation) => expectation.kind === 'component')
22
- .map((expectation) => expectation.name));
23
- const validOptionPaths = () => {
24
- const names = new Set(optionNames);
25
- optionExpectationNames.forEach((name) => names.add(name));
26
- return names;
27
- };
28
- const validComponentNames = () => {
29
- const names = new Set(componentNames);
30
- componentExpectationNames.forEach((name) => names.add(name));
31
- return names;
32
- };
33
- serialised.options.forEach((option) => {
34
- if (optionNames.has(option.name)) {
35
- errors = [
36
- ...errors,
37
- {
38
- kind: 'duplicate-option',
39
- name: option.name,
40
- detail: `Duplicate option '${option.name}'`
41
- }
42
- ];
43
- }
44
- optionNames.add(option.name);
45
- const validPaths = validOptionPaths();
46
- option.gatePaths.forEach((gatePath) => {
47
- const [pathName] = gatePath;
48
- if (typeof pathName === 'string' && !validPaths.has(pathName)) {
49
- errors = [
50
- ...errors,
51
- {
52
- kind: 'invalid-gate-path',
53
- name: option.name,
54
- detail: `Option '${option.name}' has gate path '${String(pathName)}' which does not reference a known option or expectation`
55
- }
56
- ];
57
- }
58
- });
59
- if (option.config !== null) {
60
- if (option.config.type === 'match' && 'matchPath' in option.config) {
61
- const [matchPathName] = option.config.matchPath;
62
- if (typeof matchPathName === 'string' && !validPaths.has(matchPathName)) {
63
- errors = [
64
- ...errors,
65
- {
66
- kind: 'invalid-config-path',
67
- name: option.name,
68
- detail: `Option '${option.name}' has match path '${String(matchPathName)}' which does not reference a known option or expectation`
69
- }
70
- ];
71
- }
72
- }
73
- if (option.config.type === 'unless' && 'unlessPath' in option.config) {
74
- const [unlessPathName] = option.config.unlessPath;
75
- if (typeof unlessPathName === 'string' && !validPaths.has(unlessPathName)) {
76
- errors = [
77
- ...errors,
78
- {
79
- kind: 'invalid-config-path',
80
- name: option.name,
81
- detail: `Option '${option.name}' has unless path '${String(unlessPathName)}' which does not reference a known option or expectation`
82
- }
83
- ];
84
- }
85
- }
86
- }
87
- });
88
- const validPaths = validOptionPaths();
89
- serialised.components.forEach((component) => {
90
- if (componentNames.has(component.name)) {
91
- errors = [
92
- ...errors,
93
- {
94
- kind: 'duplicate-component',
95
- name: component.name,
96
- detail: `Duplicate component '${component.name}'`
97
- }
98
- ];
99
- }
100
- componentNames.add(component.name);
101
- component.paths.forEach((path) => {
102
- const [pathName] = path;
103
- if (typeof pathName === 'string' && !validPaths.has(pathName)) {
104
- errors = [
105
- ...errors,
106
- {
107
- kind: 'invalid-component-path',
108
- name: component.name,
109
- detail: `Component '${component.name}' references path '${String(pathName)}' which does not reference a known option or expectation`
110
- }
111
- ];
112
- }
113
- });
114
- component.dependencies.forEach((dependency) => {
115
- if (!validComponentNames().has(dependency)) {
116
- errors = [
117
- ...errors,
118
- {
119
- kind: 'invalid-component-dependency',
120
- name: component.name,
121
- detail: `Component '${component.name}' depends on '${dependency}' which does not reference a known component or expectation`
122
- }
123
- ];
124
- }
125
- });
126
- });
127
- serialised.collections.forEach((collection) => {
128
- if (collectionNames.has(collection.name)) {
129
- errors = [
130
- ...errors,
131
- {
132
- kind: 'duplicate-collection',
133
- name: collection.name,
134
- detail: `Duplicate collection '${collection.name}'`
135
- }
136
- ];
137
- }
138
- collectionNames.add(collection.name);
139
- });
140
- serialised.collections.forEach((collection) => {
141
- const [, nestedErrors] = validateSerialised(collection.builder);
142
- errors = [...errors, ...nestedErrors];
143
- });
144
- if (options?.strict && errors.length > 0) {
145
- throw new BuilderSerialisedValidateError(errors);
146
- }
147
- return [serialised, errors];
148
- }
package/dist/ui.d.ts DELETED
@@ -1,19 +0,0 @@
1
- import type { BuilderModelPaths } from './paths';
2
- import type { BuilderCollectionNamesOf, BuilderGeneric } from './core/index';
3
- import type { BuilderExpectationEntries, BuilderExpectations, BuilderModelAsserted } from './core/expectation';
4
- import type { BuilderValidated } from './core/validate';
5
- import type { BuilderUIItems } from './schemas/index';
6
- export type BuilderUIGeneric = BuilderUI<BuilderGeneric>;
7
- export type BuilderUIs = ReadonlyArray<BuilderUI<BuilderGeneric | null>>;
8
- export declare class BuilderUI<Builder extends BuilderGeneric | null = BuilderGeneric> {
9
- readonly builder: Builder;
10
- readonly items: BuilderUIItems;
11
- readonly expectations: BuilderExpectationEntries;
12
- constructor(builder: Builder, items?: BuilderUIItems, expectations?: BuilderExpectationEntries);
13
- expect<const Expectations extends BuilderExpectations>(...expectations: Expectations): BuilderUI<BuilderModelAsserted<Builder, Expectations>>;
14
- page(label: string | null, paths: BuilderModelPaths<Builder>): BuilderUI<Builder>;
15
- describe(label: string | null, paths: BuilderModelPaths<Builder>): BuilderUI<Builder>;
16
- collection<const Name extends BuilderCollectionNamesOf<Builder>>(name: Name, label: string, itemUI: BuilderUI<BuilderGeneric | null>): BuilderUI<Builder>;
17
- }
18
- export declare function ui(): BuilderUI<null>;
19
- export declare function ui<const Builder extends BuilderValidated>(builder: Builder, ...uis: BuilderUIs): BuilderUI<Builder>;
package/dist/ui.js DELETED
@@ -1,44 +0,0 @@
1
- import { Builder } from './core/builder.js';
2
- import { check } from './check.js';
3
- import { validateBuilder } from './core/validate.js';
4
- export class BuilderUI {
5
- builder;
6
- items;
7
- expectations;
8
- constructor(builder, items = [], expectations = []) {
9
- this.builder = builder;
10
- this.items = items;
11
- this.expectations = expectations;
12
- }
13
- expect(...expectations) {
14
- return new BuilderUI(
15
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- type narrowing cast, validated at merge time
16
- this.builder, this.items, [...this.expectations, ...expectations]);
17
- }
18
- page(label, paths) {
19
- return new BuilderUI(this.builder, [...this.items, { type: 'page', label, paths }], this.expectations);
20
- }
21
- describe(label, paths) {
22
- return new BuilderUI(this.builder, [...this.items, { type: 'describe', label, paths }], this.expectations);
23
- }
24
- collection(name, label, itemUI) {
25
- if (this.builder) {
26
- const foundCollection = this.builder.collections.find((entry) => entry.name === name);
27
- check.truthy(foundCollection, `Collection '${name}' not found! ❌`);
28
- }
29
- return new BuilderUI(this.builder, [...this.items, { type: 'collection', name, label, items: itemUI.items }], this.expectations);
30
- }
31
- }
32
- export function ui(builder, ...uis) {
33
- if (!builder) {
34
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- null builder for partial UIs, typed as BuilderUI<null>
35
- return new BuilderUI(null);
36
- }
37
- const merged = uis.reduce((accumulated, currentUI) => {
38
- return new BuilderUI(
39
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- accumulated.builder is always the real builder from the first argument
40
- accumulated.builder, [...accumulated.items, ...currentUI.items], [...accumulated.expectations, ...currentUI.expectations]);
41
- }, new BuilderUI(builder));
42
- validateBuilder(new Builder(merged.builder.options, merged.builder.components, merged.builder.collections, merged.expectations), { strict: true });
43
- return merged;
44
- }